diff --git a/kima/vendor/spleaf/.gitlab-ci.yml b/kima/vendor/spleaf/.gitlab-ci.yml deleted file mode 100644 index da1733c..0000000 --- a/kima/vendor/spleaf/.gitlab-ci.yml +++ /dev/null @@ -1,118 +0,0 @@ -variables: - DACECALC1: "10.194.66.55" - -image: docker-registry.obsuks2.unige.ch/condaforge/mambaforge:latest - -stages: - - build - - test - - documentation - - staging - - production - -.setup_env: - before_script: - - apt-get update -y - ## - ## Install ssh-agent if not already installed, it is required by Docker. - ## (change apt-get to yum if you use an RPM-based image) - ## - - 'command -v ssh-agent >/dev/null || ( apt-get install openssh-client -y )' - ## Run ssh-agent (inside the build environment) - ## - - eval $(ssh-agent -s) - ## - ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store - ## We're using tr to fix line endings which makes ed25519 keys work - ## without extra base64 encoding. - ## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556 - ## - - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - ## - ## Create the SSH directory and give it the right permissions - ## - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - echo "$SSH_KNOWN_HOSTS_DACECALC1" >> ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - ## Install necessary packages - - apt-get install build-essential rsync curl -y - ## Conda env - - source /opt/conda/etc/profile.d/conda.sh - - mamba env create -f spleaf_env.yml - - conda activate spleaf - -Build distribution: - extends: .setup_env - stage: build - script: - - python setup.py sdist - artifacts: - paths: - - dist/*.tar.gz - expire_in: 1 day - -Run test: - extends: .setup_env - stage: test - script: - - pip install dist/*.tar.gz - - cd test - - python -m pytest - -Generate documentation: - extends: .setup_env - stage: documentation - script: - - pip install dist/*.tar.gz - - cd doc - - make html - artifacts: - paths: - - doc/build/html - expire_in: 1 day - -Deploy on Staging: - extends: .setup_env - stage: staging - script: - - rsync -v dist/*.tar.gz dacemgr@${DACECALC1}:/www/people/delisle/public/staging/spleaf/ - - rsync -rv --delete doc/build/html/ dacemgr@${DACECALC1}:/www/people/delisle/public/staging/spleaf/doc - -Release and deploy on Production: - extends: .setup_env - stage: production - script: - # According to documentation, gitlab uses detached HEAD and we need to go back to master to release. - # See https://gitlab.com/gitlab-org/gitlab-ce/issues/19421 - - git checkout -B master origin/master - - git config --global user.name 'Gitlab CI' - - git config --global user.email '' - - git remote set-url origin "https://gitlab-ci-token:$RELEASE_TOKEN@gitlab.unige.ch/jean-baptiste.delisle/spleaf.git" - # Tag - - VERSION=`grep __version__ spleaf/__info__.py | sed 's/.*version__ = "//' | sed 's/"//'` - - TAG_VERSION="v$VERSION" - - git tag -a "$TAG_VERSION" -m "Release spleaf $TAG_VERSION" - - git push origin "$TAG_VERSION" --quiet - - CHANGES=`cat CHANGES.txt` - # Add release on gitlab (via gitlab API) - - curl -X POST -H "PRIVATE-TOKEN:$RELEASE_TOKEN" -F "name=Release spleaf $TAG_VERSION" -F "tag_name=$TAG_VERSION" -F "ref=$TAG_VERSION" -F "description=Changes:$CHANGES" 'https://gitlab.unige.ch/api/v4/projects/1383/releases' - # Deploy on https://obswww.unige.ch/~delisle/ - - rsync -v dist/*.tar.gz dacemgr@${DACECALC1}:/www/people/delisle/public/spleaf/ - - rsync -rv --delete doc/build/html/ dacemgr@${DACECALC1}:/www/people/delisle/public/spleaf/doc - - rsync -rv --delete doc/build/html/ dacemgr@${DACECALC1}:/www/people/delisle/public/spleaf/doc_hist/${TAG_VERSION} - # Deploy on Pypi - - python -m twine upload dist/*.tar.gz - # Upgrade to next version - - MAJOR_DIGIT=`echo $VERSION | awk -F. '{print $1}'` - - MINOR_DIGIT=`echo $VERSION | awk -F. '{print $2}'` - - PATCH_DIGIT=`echo $VERSION | awk -F. '{print $3}'` - - PATCH_DIGIT=$((PATCH_DIGIT + 1)) - - NEW_VERSION="$MAJOR_DIGIT.$MINOR_DIGIT.$PATCH_DIGIT" - - echo $NEW_VERSION - # Need to hack sed to work on both mac and unix. See details here : https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-bsd-and-linux - - sed -i.bak s"/version__ = \"$VERSION\"/version__ = \"$NEW_VERSION\"/g" spleaf/__info__.py - - git add spleaf/__info__.py - - git commit -m "Upgrade project to next version $NEW_VERSION" - - git push origin master --quiet - when: manual diff --git a/kima/vendor/spleaf/CHANGES.txt b/kima/vendor/spleaf/CHANGES.txt deleted file mode 100644 index 8d1c8b6..0000000 --- a/kima/vendor/spleaf/CHANGES.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/kima/vendor/spleaf/COPYING b/kima/vendor/spleaf/COPYING deleted file mode 100644 index 94a9ed0..0000000 --- a/kima/vendor/spleaf/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/kima/vendor/spleaf/MANIFEST.in b/kima/vendor/spleaf/MANIFEST.in deleted file mode 100644 index 30af8cb..0000000 --- a/kima/vendor/spleaf/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -graft spleaf -include COPYING diff --git a/kima/vendor/spleaf/README.rst b/kima/vendor/spleaf/README.rst deleted file mode 100644 index 3b8421d..0000000 --- a/kima/vendor/spleaf/README.rst +++ /dev/null @@ -1,12 +0,0 @@ -S+LEAF: Semiseparable + leaf matrix -=================================== - -Read the documentation at ``_. - -Contribute ----------- - -Everyone is welcome to open issues and/or contribute code via pull-requests. -A SWITCH edu-ID account is necessary to sign in to ``_. -If you don't have an account, you can easily create one at ``_. -Then you can sign in to ``_ by selecting "SWITCH edu-ID" as your organisation. diff --git a/kima/vendor/spleaf/doc/Makefile b/kima/vendor/spleaf/doc/Makefile deleted file mode 100644 index 69fe55e..0000000 --- a/kima/vendor/spleaf/doc/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_static/.gitignore b/kima/vendor/spleaf/doc/source/_static/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/kima/vendor/spleaf/doc/source/_templates/autosummary/attribute.rst b/kima/vendor/spleaf/doc/source/_templates/autosummary/attribute.rst deleted file mode 100644 index a176e99..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/autosummary/attribute.rst +++ /dev/null @@ -1,8 +0,0 @@ -:orphan: - -{{ fullname }} -{{ underline }} - -.. currentmodule:: {{ module }} - -.. autoattribute:: {{ objname }} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_templates/autosummary/class.rst b/kima/vendor/spleaf/doc/source/_templates/autosummary/class.rst deleted file mode 100644 index b9a48a7..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/autosummary/class.rst +++ /dev/null @@ -1,38 +0,0 @@ -{{ fullname }} -{{ underline }} - -.. currentmodule:: {{ module }} - -.. autoclass:: {{ objname }} - :no-members: - :no-inherited-members: - :no-special-members: - - {% block methods %} - .. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages. - .. autosummary:: - :toctree: - {% for item in all_methods %} - {%- if not item.startswith('_') or item in ['__call__', '__mul__', '__getitem__', '__len__'] %} - {{ name }}.{{ item }} - {%- endif -%} - {%- endfor %} - {% for item in inherited_members %} - {%- if item in ['__call__', '__mul__', '__getitem__', '__len__'] %} - {{ name }}.{{ item }} - {%- endif -%} - {%- endfor %} - {% endblock %} - - {% block attributes %} - {% if attributes %} - .. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages. - .. autosummary:: - :toctree: - {% for item in all_attributes %} - {%- if not item.startswith('_') %} - {{ name }}.{{ item }} - {%- endif -%} - {%- endfor %} - {% endif %} - {% endblock %} diff --git a/kima/vendor/spleaf/doc/source/_templates/autosummary/custom_module.rst b/kima/vendor/spleaf/doc/source/_templates/autosummary/custom_module.rst deleted file mode 100644 index fbac67f..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/autosummary/custom_module.rst +++ /dev/null @@ -1,52 +0,0 @@ -{{ fullname | escape | underline}} - -.. automodule:: {{ fullname }} - - {% block attributes %} - {% if attributes %} - .. rubric:: Module Attributes - - .. autosummary:: - :toctree: - {% for item in attributes %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - - {% block functions %} - {% if functions %} - .. rubric:: {{ _('Functions') }} - - .. autosummary:: - :toctree: - {% for item in functions %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - - {% block classes %} - {% if classes %} - .. rubric:: {{ _('Classes') }} - - .. autosummary:: - :toctree: - {% for item in classes %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - - {% block exceptions %} - {% if exceptions %} - .. rubric:: {{ _('Exceptions') }} - - .. autosummary:: - :toctree: - {% for item in exceptions %} - {{ item }} - {%- endfor %} - {% endif %} - {% endblock %} - diff --git a/kima/vendor/spleaf/doc/source/_templates/autosummary/method.rst b/kima/vendor/spleaf/doc/source/_templates/autosummary/method.rst deleted file mode 100644 index 6dce222..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/autosummary/method.rst +++ /dev/null @@ -1,8 +0,0 @@ -:orphan: - -{{ fullname }} -{{ underline }} - -.. currentmodule:: {{ module }} - -.. automethod:: {{ objname }} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_templates/autosummary/property.rst b/kima/vendor/spleaf/doc/source/_templates/autosummary/property.rst deleted file mode 100644 index 8c3d073..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/autosummary/property.rst +++ /dev/null @@ -1,8 +0,0 @@ -:orphan: - -{{ fullname }} -{{ underline }} - -.. currentmodule:: {{ module }} - -.. autoproperty:: {{ objname }} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_templates/indexsidebar.html b/kima/vendor/spleaf/doc/source/_templates/indexsidebar.html deleted file mode 100644 index 5439799..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/indexsidebar.html +++ /dev/null @@ -1,5 +0,0 @@ -

Resources

- diff --git a/kima/vendor/spleaf/doc/source/_templates/layout.html b/kima/vendor/spleaf/doc/source/_templates/layout.html deleted file mode 100644 index 71e8d48..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/layout.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "!layout.html" %} - -{% block sidebarsearch %} -{%- if sourcename %} - -{%- endif %} -{{ super() }} -{% endblock %} diff --git a/kima/vendor/spleaf/doc/source/_templates/searchbox.html b/kima/vendor/spleaf/doc/source/_templates/searchbox.html deleted file mode 100644 index 8034d03..0000000 --- a/kima/vendor/spleaf/doc/source/_templates/searchbox.html +++ /dev/null @@ -1,23 +0,0 @@ -{# - basic/searchbox.html - ~~~~~~~~~~~~~~~~~~~~ - - Sphinx sidebar template: quick search box. - - :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. - :license: BSD, see LICENSE for details. -#} -{%- if pagename != "search" and builder != "singlehtml" %} - - -{%- endif %} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/layout.html b/kima/vendor/spleaf/doc/source/_theme/scipy/layout.html deleted file mode 100644 index 25e3e8e..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/layout.html +++ /dev/null @@ -1,262 +0,0 @@ -{# - scipy/layout.html - ~~~~~~~~~~~~~~~~~ - - Master layout template for Sphinx themes. - - :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. - :license: BSD, see LICENSE for details. -#} -{%- block doctype -%} - -{%- endblock %} -{%- set url_root = pathto('', 1) %} -{%- if url_root == '#' %}{% set url_root = '' %}{% endif %} -{%- if not embedded and docstitle %} - {%- set titlesuffix = " — "|safe + docstitle|e %} -{%- else %} - {%- set titlesuffix = "" %} -{%- endif %} - -{%- macro relbar_top() %} - -{%- endmacro %} - -{%- macro relbar_top_right() %} - -{%- endmacro %} - -{%- macro relbar_bottom() %} -{%- endmacro %} - -{%- macro sidebar() %} -
-
- {%- block sidebarlogo %} - {%- if logo %} - - {%- endif %} - {%- endblock %} - {%- if sidebars != None %} - {#- new style sidebar: explicitly include/exclude templates #} - {%- for sidebartemplate in sidebars %} - {%- include sidebartemplate %} - {%- endfor %} - {%- else %} - {#- old style sidebars: using blocks -- should be deprecated #} - {%- block sidebartoc %} - {%- include "localtoc.html" %} - {%- endblock %} - {%- block sidebarrel %} - {%- include "relations.html" %} - {%- endblock %} - {%- block sidebarsourcelink %} - {%- include "sourcelink.html" %} - {%- endblock %} - {%- if customsidebar %} - {%- include customsidebar %} - {%- endif %} - {%- block sidebarsearch %} - {%- include "searchbox.html" %} - {%- endblock %} - {%- endif %} -
-
-{%- endmacro %} - -{%- macro script() %} - - {%- for scriptfile in script_files %} - - {%- endfor %} - -{%- endmacro %} - -{%- macro css() %} - - - - - {%- for cssfile in css_files %} - - {%- endfor %} -{%- endmacro %} - - - - - {{ metatags }} - {%- block htmltitle %} - {{ title|striptags|e }}{{ titlesuffix }} - {%- endblock %} - {{ css() }} - {%- if not embedded %} - {%- block scripts %} - {{ script() }} - {%- endblock %} - {%- if use_opensearch %} - - {%- endif %} - {%- if favicon %} - - {%- endif %} - {%- endif %} -{%- block linktags %} - {%- if hasdoc('about') %} - - {%- endif %} - {%- if hasdoc('genindex') %} - - {%- endif %} - {%- if hasdoc('search') %} - - {%- endif %} - {%- if hasdoc('copyright') %} - - {%- endif %} - - {%- if parents %} - - {%- endif %} - {%- if next %} - - {%- endif %} - {%- if prev %} - - {%- endif %} -{%- endblock %} -{%- block extrahead %} {% endblock %} - - -{%- block header %} -{% if theme_scipy_org_logo %} -
-
- - SciPy -
-
- -{% else %} -
-
-
-
-{% endif %} -{% endblock %} - -{%- block content %} -
-
-{%- block navbar %} - {% if theme_navigation_links or sidebar == 'left' %} -
-
-
- {{ relbar_top() }} - {% if theme_navigation_links %} - {{ relbar_top_right() }} - {% endif %} -
-
-
- {% endif %} -{% endblock %} -
- {%- if theme_sidebar == 'left' -%} - {{ sidebar() }} - {%- endif %} - {%- if theme_sidebar == 'none' -%} -
-
- {% else %} -
- {%- endif %} - {% if not theme_navigation_links and sidebar != 'left' %} -
-
-
- {{ relbar_top() }} -
-
-
- {% endif %} - {%- block document %} -
-
- {% block body %} {% endblock %} -
-
- {%- endblock %} -
- {%- if theme_sidebar == 'right' -%} - {{ sidebar() }} - {%- elif theme_sidebar == 'none' -%} -
- {%- endif %} -
-
-
-{%- endblock %} - -
-
- {{ relbar_bottom() }} -
-
- -{%- block footer %} -
- -
-{%- endblock %} - - diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/searchbox.html b/kima/vendor/spleaf/doc/source/_theme/scipy/searchbox.html deleted file mode 100644 index 3c753e9..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/searchbox.html +++ /dev/null @@ -1,13 +0,0 @@ -{%- if theme_edit_link -%} -{% block edit_link %} -{%- if sourcename %} -
-{%- if 'generated/' in sourcename %} - {{_('Edit page')}} -{%- else %} - {{_('Edit page')}} -{%- endif %} -
-{%- endif %} -{% endblock %} -{%- endif -%} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/sourcelink.html b/kima/vendor/spleaf/doc/source/_theme/scipy/sourcelink.html deleted file mode 100644 index 2c9109a..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/sourcelink.html +++ /dev/null @@ -1,7 +0,0 @@ -{%- if show_source and has_source and sourcename %} -

{{ _('This Page') }}

- -{%- endif %} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/extend.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/extend.css deleted file mode 100644 index bd7a981..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/extend.css +++ /dev/null @@ -1,116 +0,0 @@ -.container { - width: 80%; -} -.navbar1 { - padding-bottom: 10px; -} -.navbar1 .nav-pills { - margin-bottom: 0px; - font-size: 12px; -} -.navbar1 .nav-pills > li > a { - padding-top: 2.5px; - padding-bottom: 2.5px; -} -.navbar1 .dropdown.dropdown-menu { - padding: 0px; -} -.header { - padding-top: 30px; - padding-bottom: 18px; -} -.SearchBar .form-search { - margin-bottom: 0px; -} -.SearchBar .input-append input { - height: 12px; -} -body { - font-family: Segoe UI; - background-color: #f9faf7; -} -.main { - background-color: white; - padding: 18px; - -moz-box-shadow: 0 0 3px #888; - -webkit-box-shadow: 0 0 3px #888; - box-shadow: 0 0 3px #888; -} -.MainHeader h1 { - font-weight: normal; -} -.content .contentTitle h4 { - font-size: 18px; - font-weight: normal; -} -.content .meta { - font-size: small; -} -.tags .btn { - border: none; - font-size: 10px; - font-weight: bold; -} -.navigation { - font-size: 12px; - padding-bottom: 12px; -} -.navigation .nav-title { - color: #333333; - font-family: "Segoe UI semibold"; - font-size: 16px; - text-transform: uppercase; -} -.navigation li { - margin: 5px; -} -.snippetHeader { - margin-bottom: 5px; -} -.snippetHeader .snippetTitle { - font-size: 21px; - line-height: 40px; - border-bottom: 1px solid #e5e5e5; - display: block; - color: #333333; -} -.snippetInfo { - padding-top: 10px; -} -.snippetInfo .dl-horizontal { - margin: 5px; -} -.snippet-body { - padding: 10px; -} -.snippet-body .accordion-group { - border: none; -} -.snippet-body .accordion-heading { - text-transform: uppercase; - font-size: 14px; - border-bottom: 1px solid #e5e5e5; -} -.snippet-body .accordion-heading .accordion-toggle { - padding-top: 10px; - padding-bottom: 5px; -} -.SearchResult { - padding: 10px; - padding-top: 0px; -} -.SearchResult .PageTitle { - font-size: 21px; - line-height: 40px; - border-bottom: 1px solid #e5e5e5; - padding-bottom: 5px; - display: block; - color: #333333; -} -.footer { - padding: 10px; -} -.footer-inside { - border-top: 1px solid #e5e5e5; - padding: 10px; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/pygments.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/pygments.css deleted file mode 100644 index 1c9c56a..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/pygments.css +++ /dev/null @@ -1,87 +0,0 @@ -/* Styling for the source code listings: (mostly from pygments)*/ - -.highlight pre{ - overflow: auto; - padding: 5px; - background-color: #ffffff; - color: #333333; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -/* Styling for pre elements: from http://perishablepress.com/press/2009/11/09/perfect-pre-tags/ */ -/* no vertical scrollbars for IE 6 */ -* html pre { - padding-bottom:25px; - overflow-y:hidden; - overflow:visible; - overflow-x:auto -} -/* no vertical scrollbars for IE 7 */ -*:first-child+html pre { - padding-bottom:25px; - overflow-y:hidden; - overflow:visible; - overflow-x:auto -} - -div#spc-section-body td.linenos pre { - padding: 5px 0px; - border: 0; - background-color: transparent; - color: #aaa; -} -.highlight .hll { background-color: #ffffcc } -.highlight { background: #ffffff; } -.highlight .c { color: #008000 } /* Comment */ -.highlight .k { color: #000080; font-weight: bold } /* Keyword */ -.highlight .n { color: #000000 } /* Name */ -.highlight .o { color: #000000 } /* Operator */ -.highlight .cm { color: #008000 } /* Comment.Multiline */ -.highlight .cp { color: #008000 } /* Comment.Preproc */ -.highlight .c1 { color: #008000 } /* Comment.Single */ -.highlight .cs { color: #008000 } /* Comment.Special */ -.highlight .kc { color: #000080; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #000080; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #000080; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #000080; font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { color: #000080; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #000080; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #008080 } /* Literal.Number */ -.highlight .s { color: #800080 } /* Literal.String */ -.highlight .na { color: #000000 } /* Name.Attribute */ -.highlight .nb { color: #407090 } /* Name.Builtin */ -.highlight .nc { color: #0000F0; font-weight: bold } /* Name.Class */ -.highlight .no { color: #000000 } /* Name.Constant */ -.highlight .nd { color: #000000 } /* Name.Decorator */ -.highlight .ni { color: #000000 } /* Name.Entity */ -.highlight .ne { color: #000000 } /* Name.Exception */ -.highlight .nf { color: #008080; font-weight: bold } /* Name.Function */ -.highlight .nl { color: #000000 } /* Name.Label */ -.highlight .nn { color: #000000 } /* Name.Namespace */ -.highlight .nx { color: #000000 } /* Name.Other */ -.highlight .py { color: #000000 } /* Name.Property */ -.highlight .nt { color: #000000 } /* Name.Tag */ -.highlight .nv { color: #000000 } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .mf { color: #008080 } /* Literal.Number.Float */ -.highlight .mh { color: #008080 } /* Literal.Number.Hex */ -.highlight .mi { color: #008080 } /* Literal.Number.Integer */ -.highlight .mo { color: #008080 } /* Literal.Number.Oct */ -.highlight .sb { color: #800080 } /* Literal.String.Backtick */ -.highlight .sc { color: #800080 } /* Literal.String.Char */ -.highlight .sd { color: #800000 } /* Literal.String.Doc */ -.highlight .s2 { color: #800080 } /* Literal.String.Double */ -.highlight .se { color: #800080 } /* Literal.String.Escape */ -.highlight .sh { color: #800080 } /* Literal.String.Heredoc */ -.highlight .si { color: #800080 } /* Literal.String.Interpol */ -.highlight .sx { color: #800080 } /* Literal.String.Other */ -.highlight .sr { color: #800080 } /* Literal.String.Regex */ -.highlight .s1 { color: #800080 } /* Literal.String.Single */ -.highlight .ss { color: #800080 } /* Literal.String.Symbol */ -.highlight .bp { color: #407090 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #000000 } /* Name.Variable.Class */ -.highlight .vg { color: #000000 } /* Name.Variable.Global */ -.highlight .vi { color: #000000 } /* Name.Variable.Instance */ -.highlight .il { color: #008080 } /* Literal.Number.Integer.Long */ diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/scipy-central.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/scipy-central.css deleted file mode 100644 index 6bbfdda..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/scipy-central.css +++ /dev/null @@ -1,795 +0,0 @@ -/* -Styling to add still --------------------- - -div: spc-notice (general notices: e.g. submission requested is invalid) - -*/ - -/* -------------------------------------------------------------------------*/ -/* Basic layout of the document: no styling - that is applied further down. */ -/* -------------------------------------------------------------------------*/ -body { - /* From: http://matthewjamestaylor.com/blog/perfect-3-column.htm */ - margin:0; - padding:0; - border:0; /* This removes the border around the viewport in old versions of IE */ - width:100%; - background:#ffffff; - min-width:600px; /* Minimum width of layout - remove line if not required */ - /* The min-width property does not work in old versions of Internet Explorer */ -} - -#spc-document-container{ - position: relative; - min-width: 50em; - max-width: 90em; -} -#spc-header { - clear: both; - float: left; - width: 100%; - display: block; -} -.spc-header-row{ - float: left; - width: 100%; - clear: both; -} -.spc-header-left{ - float: left; - position: relative; - left: +1% -} -.spc-header-right{ - float: right; - position: relative; - left: -1% -} -#spc-contentwrap{ - display: block; - overflow: hidden; -} -#spc-content-main{ - float: left; - width: 100%; -} - -#spc-navigation-bottom{ - clear: both; -} -#spc-footer{ - clear: both; -} - -/* -------------------------------------------- */ -/* Now we will begin styling the various blocks */ -/* -------------------------------------------- */ - -/* Document container */ -#spc-document-container { - font: 13px/1.5 'Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif; - background: #FFFFFF; - margin: auto; /* display container in the center of the page */ - padding-top: 12px; -} -#spc-document-container img{ - border: 0 -} -#spc-document-container a:visited { /* for IE6 */ - color: purple; -} -/* Header block styling */ -.spc-header-row{ - text-align: center; -} -.spc-header-right{ - float: right; - text-align: right; -} -#spc-site-notice{ - /*display: none;*/ - color: #aaf; - font-weight: bold; - padding: 6px 0px; - border-bottom: 1px dashed #aaf; - background: #eee; - /*display: none; Uncomment to remove the site notice*/ -} -#spc-site-title{ - border-bottom: 1px solid #aaa; - margin-top: -2em; - -} - -#spc-top-menu{ - padding-top: 0.25em; -} -#spc-header h1 a { - color: black; - text-decoration: none; - text-align: center; - font: 36px/1.0 'Inconsolata','Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif; - font-weight: bold; -} -#spc-top-menu a { - text-decoration: none; - font-weight: bold; - font: 20px 'Inconsolata','Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif; -} -#spc-top-menu a:hover{ - text-decoration: underline; -} - -/* contentwrap block: applies to everything in the bulk of the page */ -#spc-contentwrap { -} - -/* The major chunk of content (left side); the sidebar comes later */ -#spc-content-main{ - background: #FFFFFF; -} - -/* Border */ -#spc-border { - margin-left: 0px; - background: white; - padding-top: 0em; /* Don't remove top and bottom padding: leads to */ - padding-bottom: 0em; /* unwanted horizontal borders around the document.*/ - padding-left: 2em; - padding-right: 2em; -} - -/* spc-section-body: the current section of the document. The Sphinx - generated HTML is inserted inside this DIV element. Specific formatting for - the HTML should go here */ -/* ----------------------- */ -#spc-section-body { - margin-bottom: 1em; -} - -/* Styling for the headers */ -div#spc-section-body h1, h2, h3, h4, h5, h6{ - color: #20435C; - font-family: 'Trebuchet MS', sans-serif; - font-weight: normal; - border-bottom: 0px solid #ccc; - margin-bottom: 0.5em; -} -div#spc-section-body h1 { font-size: 200%; font-weight: bold;} -div#spc-section-body h2 { font-size: 160%; font-weight: bold; color: #101074;} -div#spc-section-body h3 { font-size: 140%; color: #362A13;} -div#spc-section-body h4 { font-size: 120%; } -div#spc-section-body h5 { font-size: 110%; } -div#spc-section-body h6 { font-size: 100%; } - -.spc-title-in-span{font-size: 160%; font-weight: bold; color: #101074; float: left;} - -/* Styling for forms */ -input, select, textarea{ - border:solid 1px #aacfe4; - padding: 4px 2px; - margin-bottom: 1em; -} - -/* Styling for hyperlinks */ -div#spc-section-body a{ - text-decoration: none; -} -div#spc-section-body a:hover{ - text-decoration: underline; -} - -/* Styling for images and figures: images are inline, figures are centered */ -div#spc-section-body .align-center{ - text-align: center; -} - -/* Styling for elements */ -tt { - background-color:#EEE; - color:#000; - font: 16px/1.0 'Inconsolata', Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; -} - -/* Main page */ -#spc-site-statement{ - width: 90%; - margin: auto; - text-align: center; - padding-top: 1em; -} -#spc-search{ - clear: both; - float: none; - display: block; - margin: 0 auto; - width: 700px; -} -#spc-search-form{ - margin-top: 10pt; -} -#spc-search-input { - cursor: auto; - display: inline; - height: 31px; - float: left; - width: 580px; - border: 2px solid #3e5d34; - padding: 0; - padding-left: 0.5em; - margin: 0; - margin-right: 20px; - color: #555; - font-family: 'Inconsolata', 'Lucida Grande'; - font-size: 24px; - text-indent: 0px; - text-shadow: none; - text-transform: none; - word-spacing: 0px; - background: none; -} -#spc-search-button{ - border: 1px outset #B6A792; - vertical-align:middle; - border:none; - cursor:pointer; - padding: 0; - display: block; - float: left; - width: 80px; - height: 35px; - margin: 0; - background: #ddd; - display: inline-block; - overflow: hidden; -} -#spc-search-results{ - width: 75%; -} -#spc-search-results li{ - margin: 0 auto; - list-style-type: none; - padding: 0.5em 0; - float: left; -} - -/* Submission buttons */ -.spc-button-container { - float: left; - width: 100%; - clear: both; - margin-bottom:1em; -} -#spc-buttonlist { - margin: 0 auto; - list-style-type: none; - padding: 0; - padding-top: 2em; - float: left; - position: relative; - left: 50%; -} -#spc-buttonlist li { - float: left; - position: relative; - right: 50%; - padding: 0em 1em; -} -#spc-buttonlist a { - text-decoration: none; - margin: 0 auto; - display: block; -} -.spc-button{ - background-position: 0px 0px; - background-color: #DDDDDD; - border: 1px outset #B6A792; - cursor: auto; - display: inline-block; - vertical-align: middle; - overflow: hidden; - padding: 0; - margin: 0; -} - -/* Portals */ -.spc-portal-container{ - width: 65%; - clear: both; - padding: 0px; - position: relative; - display: block; - margin: 0 auto; -} -.spc-portal-row-container { - clear:both; - float:left; - width:100%; /* width of whole page */ - overflow:hidden; /* This chops off any overhanging divs */ -} -.spc-portal-row { - float:left; - width:100%; - position:relative; - right:50%; /* right column width */ - background:#fff; /* left column background colour */ - } -.spc-portal-left, -.spc-portal-right{ - float:left; - position:relative; - padding:0 0 1em 0; - overflow:hidden; -} -.spc-portal-left { - width:46%; /* left column content width (column width minus left and right padding) */ - left:52%; /* right column width plus left column left padding */ -} -.spc-portal-right { - width:46%; /* right column content width (column width minus left and right padding) */ - left:56%; /* (right column width) plus (left column left and right padding) plus (right column left padding) */ -} -.spc-portal-container h3{ - font: 14px/1.0 'Inconsolata', Monaco, Lucida Console, Sans Mono, Courier New, monospace, serif; - text-align: center; - border-bottom: 1px solid; -} -.spc-portal-container a{ - text-decoration: none; - font-weight: bold; - font: 14px sans-serif; -} -.spc-portal-container a:hover{ - text-decoration: underline; -} -.spc-portal-container ul{ - list-style-type: square; -} -.spc-portal-container li{ - margin-left: -1em; -} - - -/* Submission forms */ -#spc-form-error-message{ - margin-bottom: 1em; - text-align: center; - border-bottom:solid 1px #000; -} -.errorlist{ - list-style-type: none; - float: left; - padding: 0; -} -.errorlist li{ - font-style: italic; -} -.spc-field-error{ - background: #ee8888; - padding: 4px; -} -.spc-form-button{ - padding: 5px; -} - - /* column container */ - /* http://matthewjamestaylor.com/blog/perfect-3-column.htm */ -.colmask { - position:relative; /* This fixes the IE7 overflow hidden bug */ - clear:both; - float:left; - width:100%; /* width of whole page */ - overflow:hidden; /* This chops off any overhanging divs */ - padding-bottom: 1em; -} -/* common column settings */ -.colright, -.colmid, -.colleft { - float:left; - width:100%; /* width of page */ - position:relative; -} -.col1, -.col2, -.col3 { - float:left; - position:relative; - padding:0; /* no left and right padding on columns */ - overflow:hidden; -} - /* 3 Column settings */ -.threecol { - background:#fff; /* right column background colour */ -} -.threecol .colmid { - right:25%; /* width of the right column */ - background:#fff; /* center column background colour */ -} -.threecol .colleft { - right:60%; /* width of the middle column */ - background:#fff; /* left column background colour */ -} -.threecol .col1 { - width:58%; /* width of center column content (column width minus padding on either side) */ - left:101%; /* 100% plus left padding of center column */ -} -.threecol .col2 { - width:13%; /* Width of left column content (column width minus padding on either side) */ - left:28%; /* width of (right column) plus (center column left and right padding) plus (left column left padding) */ -} -.threecol .col3 { - width:23%; /* Width of right column content (column width minus padding on either side) */ - left:90%; /* Please make note of the brackets here: - (100% - left column width) plus (center column left and right padding) plus (left column left and right padding) plus (right column left padding) - (100-15)+(1+1)+(1+1)+(1)*/ -} -.form-field input, select, textarea{ - width: 98%; - max-width:1000px; - min-width:500px; -} -.form-field-auto-width{ - width: auto; -} -.spc-code-description{ - height: 15em; -} -span.spc-helptext ul{ - margin: 0; - padding-left: 20px; -} -.spc-odd{ - background: #DDF; -} -.spc-even{ - background: #CCF; -} -li.spc-odd tt{ - background-color: #DDF; -} -li.spc-even tt { - background-color: #CCF; -} - -/* Image upload */ -#spc-item-upload { -} -#spc-item-upload-button{ - padding: 0.5em; - text-align: center; -} -.spc-item-upload-success{ - background: #ffa; - padding: 4px; -} - -/* Tagging */ -.ui-autocomplete { - max-height: 150px; - overflow-y: auto; - overflow-x: hidden; /* prevent horizontal scrollbar */ - padding-right: 20px; /* add padding to account for vertical scrollbar */ -} -/* IE 6 doesn't support max-height - * we use height instead, but this forces the menu to always be this tall */ -* html .ui-autocomplete { - height: 100px; -} -.spc-tag{ - background-color: #E0EAF1; - color: #3E6D8E; - border-bottom: 1px solid #37607D; - border-right: 1px solid #37607D; - text-decoration: none; - padding: 4px 4px 3px 4px; - margin: 2px 5px 2px 0px; - font-size: 90%; - line-height: 1.4; - white-space: nowrap; - cursor: pointer; - float:left; -} -.spc-tag:hover{ - background-color: #3E6D8E; - color: #E0EAF1; -} -.spc-tag-cloud{ - background-color: #FFF; - color: #3E6D8E; - border-bottom: 0px solid #37607D; - border-right: 0px solid #37607D; - text-decoration: none; - padding: 0px 4px 0px 4px; - margin: 2px 5px 2px 0px; - font-size: 90%; - white-space: nowrap; - cursor: pointer; -} -.spc-tag-cloud:hover{ - background-color: #FFF; - color: #1E4D6E; -} - -#spc-preview-edit-submit{ - clear: both; -} -#spc-preview-edit-submit form input{ - display: inline; - padding: 5px; -} -#spc-item-submit{ - margin-left:8em; - font-weight: bold; -} -#spc-item-preview{ - width:auto; - min-width:0; - padding: 0.5em; - text-align:center; -} - -#spc-item-header{ - clear: both; - padding: 0px; - float: left; - width: 102%; - position: relative; - display: block; - margin: 0 auto; - left: -1%; - top: -20px; -} -#spc-item-header-left{ - float: left; - text-align: left; -} -#spc-item-header-right{ - float: right; - text-align: right; -} - -div.spc-item-row { - clear: both; - padding-top: 10px; -} - -div.spc-item-row span.spc-item-label { - float: left; - width: 200px; - text-align: left; - padding-right: 20px; - padding-bottom: 4px; - font-weight: bold; -} - -div.spc-item-row span.spc-item-entry { - float: left; - min-width: 500px; - max-width: 1000px; - text-align: left; -} - -div.spc-item-row span.spc-item-entry ul{ - padding: 0; - margin: 0; - list-style-type: none; -} - -div.spc-item-row span.spc-50-50{ - float: left; - width: 49%; - text-align: left; -} -.spc-help-section a{ - color: #0069CC; - margin-top: 1em; -} -.spc-entries-list ul{ - padding: 0; - margin: 0; - list-style-type: none; -} -/* Unstyle certain elements in the code/link description fields */ -.spc-item-description p{ - margin: 0; - margin-bottom: 1em; -} -.spc-item-row pre{ - border: 0px solid #FFF; - overflow: auto; - padding: 5px; - background-color: #EEE; - border: none; - margin: 0; - font: 16px/1.0 'Inconsolata', Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; -} - - -/* Item display*/ -#spc-itemdisp-container{ - clear: both; - padding: 0; - padding-top: 1em; - margin: 0 auto; - width: 85%; -} - -.spc-itemdisp-row-container { - clear:both; - float:left; - width:100%; - margin: 0 0 1em 0; -} -.spc-itemdisp-row { - float:left; - width:100%; - } -.spc-itemdisp-td{ - float: left; - padding-right: 1%; -} -.spc-itemdisp-description{ - width: 50%; -} -.spc-itemdisp-link{ - float: right; - font-size: 80%; -} -div .spc-itemdisp-mainlink{ - text-decoration: underline; - float: left; - width: 100%; -} -.spc-itemdisp-revinfo{ - float: right; - font-size: 80%; -} -.spc-itemdisp-created{ - width: 23%; -} -.spc-itemdisp-tags{ - width: 23%; -} -.spc-itemdisp-odd{ - background: #fff8f1; -} -.spc-itemdisp-even{ - background: #fff; -} -.spc-itemdisp-header{ - background: #f1c79d; - padding: 0.4em 0 0.4em 0; - font-weight: bold; -} -#spc-itemdisp-pageheader{ - text-align: center; - font: 24px/1.0 'Inconsolata','Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif; - font-weight: bold; -} -.spc-itemdisp-pagination{ - float: left; -} - -div#spc-itemdisp-container h1, h2, h3, h4, h5, h6{ - font-weight: normal; - border-bottom: 1px solid #ccc;} -div#spc-itemdisp-container h1 { font-size: 130%; font-weight: bold;} -div#spc-itemdisp-container h2 { font-size: 120%; font-weight: bold;} -div#spc-itemdisp-container h3 { font-size: 110%;} -div#spc-itemdisp-container h4 { font-size: 100%; } -div#spc-itemdisp-container h5 { font-size: 100%; } -div#spc-itemdisp-container h6 { font-size: 100%; } - -/* Permalinks and other minor info*/ -.spc-minor-info { - font-size: 80%; - float: left; - border-top: 1px solid #ddd; -} -.spc-minor-info p{ - margin: 0; -} -.spc-minor-info a{ - text-decoration: none; -} -.spc-minor-info a:hover{ - text-decoration: underline; -} - -/* User profile pages */ -#spc-profile-user-options ul{ - margin: 0 auto; - padding: 0 0; -} -#spc-profile-user-options li{ - margin: 0 auto; - list-style-type: none; - padding: 0 5px 0 5px; - float: left; - border-right: 1px solid; -} -#spc-profile-user-options li:first-child{ - padding-left: 0px; -} -#spc-profile-user-options li:last-child{ - border-right: none; -} -/* Styling for certain static pages */ -#spc-static-centering{ - display: block; - margin: 0 auto; - min-width: 30em; - max-width: 50em; -} - -/* spc-footer: http://www.alistapart.com/articles/practicalcss/ */ -#spc-footer { - clear: both; - font-size: 90%; - padding: 0px; - float: left; - width: 100%; - position: relative; - display: block; - margin: 0 auto; - border-top: 1px solid #aaa; -} -#spc-footer a{ - text-decoration: none; - font-weight: bold; - font: 15px sans-serif; -} -#spc-footer a:hover{ - text-decoration: underline; -} -.spc-footer-left{ - float: left; - text-align: left; -} -.spc-footer-right{ - float: right; - text-align: right; -} -.spc-footer-left ul{ - margin: 0; - padding: 0; -} -.spc-footer-left li{ - display: inline; - padding-left: 3px; - padding-right: 7px; - border-right: 0px solid #aaa; -} -.spc-indent{ - margin-left: 15px; -} -.spc-flag{ - padding-left: 1em; - vertical-align: middle; -} - -/* ---------------- */ -/* Form styling */ -/* ---------------- */ -.spc-form{ - padding-top: 2em; -} - -.spc-form-label{ - display: block; - font-size: 14px; - color: #444; -} -.spc-centering-div-container{ - clear: both; - margin: 0 auto; - border: 1px; - padding: 1em; - float: left; -} - -/* ---------------------- */ -/* Miscellaneous elements */ -/* ---------------------- */ diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-bootstrap.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-bootstrap.css deleted file mode 100644 index 2d2c586..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-bootstrap.css +++ /dev/null @@ -1,7893 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Open+Sans); -/*! - * Bootstrap v2.3.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - - max-width: 100%; - /* Part 1: Set a maximum relative to the parent */ - - width: auto\9; - /* IE7-8 need help adjusting responsive images */ - - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} -#map_canvas img, -.google-maps img { - max-width: none; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -@media print { - * { - text-shadow: none !important; - color: #000 !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} -body { - margin: 0; - font-family: 'Open Sans', sans-serif; - font-size: 13px; - line-height: 19px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover, -a:focus { - color: #005580; - text-decoration: underline; -} -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 9.5px; -} -.lead { - margin-bottom: 19px; - font-size: 19.5px; - font-weight: 200; - line-height: 28.5px; -} -small { - font-size: 85%; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -cite { - font-style: normal; -} -.muted { - color: #999999; -} -a.muted:hover, -a.muted:focus { - color: #808080; -} -.text-warning { - color: #c09853; -} -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} -.text-error { - color: #b94a48; -} -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} -.text-info { - color: #3a87ad; -} -a.text-info:hover, -a.text-info:focus { - color: #2d6987; -} -.text-success { - color: #468847; -} -a.text-success:hover, -a.text-success:focus { - color: #356635; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 9.5px 0; - font-family: inherit; - font-weight: bold; - line-height: 19px; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} -h1, -h2, -h3 { - line-height: 38px; -} -h1 { - font-size: 35.75px; -} -h2 { - font-size: 29.25px; -} -h3 { - font-size: 22.75px; -} -h4 { - font-size: 16.25px; -} -h5 { - font-size: 13px; -} -h6 { - font-size: 11.049999999999999px; -} -h1 small { - font-size: 22.75px; -} -h2 small { - font-size: 16.25px; -} -h3 small { - font-size: 13px; -} -h4 small { - font-size: 13px; -} -.page-header { - padding-bottom: 8.5px; - margin: 19px 0 28.5px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - padding: 0; - margin: 0 0 9.5px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 19px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-bottom: 19px; -} -dt, -dd { - line-height: 19px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 9.5px; -} -.dl-horizontal { - *zoom: 1; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 180px; -} -hr { - margin: 19px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 19px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16.25px; - font-weight: 300; - line-height: 1.25; -} -blockquote small { - display: block; - line-height: 19px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -blockquote.pull-right small:before { - content: ''; -} -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 19px; - font-style: normal; - line-height: 19px; -} -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 11px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} -pre { - display: block; - padding: 9px; - margin: 0 0 9.5px; - font-size: 12px; - line-height: 19px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -pre.prettyprint { - margin-bottom: 19px; -} -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -form { - margin: 0 0 19px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 19px; - font-size: 19.5px; - line-height: 38px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -legend small { - font-size: 14.25px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 13px; - font-weight: normal; - line-height: 19px; -} -input, -button, -select, -textarea { - font-family: 'Open Sans', sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 19px; - padding: 4px 6px; - margin-bottom: 9.5px; - font-size: 13px; - line-height: 19px; - color: #555555; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - vertical-align: middle; -} -input, -textarea, -.uneditable-input { - width: 206px; -} -textarea { - height: auto; -} -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear .2s, box-shadow linear .2s; - -moz-transition: border linear .2s, box-shadow linear .2s; - -o-transition: border linear .2s, box-shadow linear .2s; - transition: border linear .2s, box-shadow linear .2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; - /* IE7 */ - - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 29px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 29px; -} -select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - min-height: 19px; - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 18px 20px 19px; - margin-top: 19px; - margin-bottom: 19px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 9.5px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 9.5px; - vertical-align: middle; - font-size: 0; - white-space: nowrap; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 13px; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 19px; - min-width: 16px; - padding: 4px 5px; - font-size: 13px; - font-weight: normal; - line-height: 19px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 9.5px; -} -legend + .control-group { - margin-top: 19px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 19px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} -.form-horizontal .controls:first-child { - *padding-left: 180px; -} -.form-horizontal .help-block { - margin-bottom: 0; -} -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 9.5px; -} -.form-horizontal .form-actions { - padding-left: 180px; -} -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 19px; -} -.table th, -.table td { - padding: 8px; - line-height: 19px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child, -.table-bordered tbody:first-child tr:first-child > th:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child, -.table-bordered tbody:first-child tr:first-child > th:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tbody:last-child tr:last-child > th:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > th:first-child { - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tbody:last-child tr:last-child > th:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > th:last-child { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; -} -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} -.table tbody tr.success > td { - background-color: #dff0d8; -} -.table tbody tr.error > td { - background-color: #f2dede; -} -.table tbody tr.warning > td { - background-color: #fcf8e3; -} -.table tbody tr.info > td { - background-color: #d9edf7; -} -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../../img/glyphicons-halflings-white.png"); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; - width: 16px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; - width: 16px; -} -.icon-folder-open { - background-position: -408px -120px; - width: 16px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.icon-hdd { - background-position: 0 -144px; -} -.icon-bullhorn { - background-position: -24px -144px; -} -.icon-bell { - background-position: -48px -144px; -} -.icon-certificate { - background-position: -72px -144px; -} -.icon-thumbs-up { - background-position: -96px -144px; -} -.icon-thumbs-down { - background-position: -120px -144px; -} -.icon-hand-right { - background-position: -144px -144px; -} -.icon-hand-left { - background-position: -168px -144px; -} -.icon-hand-up { - background-position: -192px -144px; -} -.icon-hand-down { - background-position: -216px -144px; -} -.icon-circle-arrow-right { - background-position: -240px -144px; -} -.icon-circle-arrow-left { - background-position: -264px -144px; -} -.icon-circle-arrow-up { - background-position: -288px -144px; -} -.icon-circle-arrow-down { - background-position: -312px -144px; -} -.icon-globe { - background-position: -336px -144px; -} -.icon-wrench { - background-position: -360px -144px; -} -.icon-tasks { - background-position: -384px -144px; -} -.icon-filter { - background-position: -408px -144px; -} -.icon-briefcase { - background-position: -432px -144px; -} -.icon-fullscreen { - background-position: -456px -144px; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 8.5px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 19px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 19px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 13px; - line-height: 19px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #cccccc; - *border: 0; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -} -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 11px 19px; - font-size: 16.25px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} -.btn-small { - padding: 2px 10px; - font-size: 11.049999999999999px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 0 6px; - font-size: 9.75px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: #0088cc; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} -.btn-group { - position: relative; - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - font-size: 0; - margin-top: 9.5px; - margin-bottom: 9.5px; -} -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 13px; -} -.btn-group > .btn-mini { - font-size: 9.75px; -} -.btn-group > .btn-small { - font-size: 11.049999999999999px; -} -.btn-group > .btn-large { - font-size: 16.25px; -} -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} -.dropup .btn-large .caret { - border-bottom-width: 5px; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 19px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert, -.alert h4 { - color: #c09853; -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 19px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-success h4 { - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-info h4 { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.nav { - margin-left: 0; - margin-bottom: 19px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li > a > img { - max-width: none; -} -.nav > .pull-right { - float: right; -} -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 19px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 8.5px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 19px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.nav .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tab-content { - overflow: auto; -} -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.nav > .disabled > a { - color: #999999; -} -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - cursor: default; -} -.navbar { - overflow: visible; - margin-bottom: 19px; - *position: relative; - *z-index: 2; -} -.navbar-inner { - min-height: 40px; - padding-left: 20px; - padding-right: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - *zoom: 1; -} -.navbar-inner:before, -.navbar-inner:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-inner:after { - clear: both; -} -.navbar-inner:before, -.navbar-inner:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-inner:after { - clear: both; -} -.navbar .container { - width: auto; -} -.nav-collapse.collapse { - height: auto; - overflow: visible; -} -.navbar .brand { - float: left; - display: block; - padding: 10.5px 20px 10.5px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} -.navbar-link { - color: #777777; -} -.navbar-link:hover, -.navbar-link:focus { - color: #333333; -} -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-left: 1px solid #f2f2f2; - border-right: 1px solid #ffffff; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - font-family: 'Open Sans', sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.navbar-static-top { - position: static; - margin-bottom: 0; -} -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); - box-shadow: 0 1px 10px rgba(0,0,0,.1); -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - box-shadow: 0 -1px 10px rgba(0,0,0,.1); -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10.5px 15px 10.5px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: transparent; - color: #333333; - text-decoration: none; -} -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e5e5e5; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.navbar .nav > li > .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .nav > li > .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #e5e5e5; - color: #555555; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); - border-color: #252525; -} -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; -} -.navbar-inverse .brand { - color: #999999; -} -.navbar-inverse .navbar-text { - color: #999999; -} -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; -} -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} -.navbar-inverse .navbar-link { - color: #999999; -} -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; -} -.navbar-inverse .divider-vertical { - border-left-color: #111111; - border-right-color: #222222; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #111111; - color: #ffffff; -} -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #040404; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} -.breadcrumb { - padding: 8px 15px; - margin: 0 0 19px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} -.breadcrumb > .active { - color: #999999; -} -.pagination { - margin: 19px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination ul > li { - display: inline; -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 19px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 16.25px; -} -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-top-left-radius: 3px; - -moz-border-radius-topleft: 3px; - border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - border-bottom-left-radius: 3px; -} -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - -moz-border-radius-topright: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -moz-border-radius-bottomright: 3px; - border-bottom-right-radius: 3px; -} -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.049999999999999px; -} -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 9.75px; -} -.pager { - margin: 19px 0; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; - line-height: 0; -} -.pager:after { - clear: both; -} -.pager:before, -.pager:after { - display: table; - content: ""; - line-height: 0; -} -.pager:after { - clear: both; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - background-color: #fff; - cursor: default; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; - outline: none; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 10%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - font-size: 11px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.popover-title:empty { - display: none; -} -.popover-content { - padding: 9px 14px; -} -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: 11px; -} -.popover .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; - line-height: 0; -} -.thumbnails:after { - clear: both; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; - line-height: 0; -} -.thumbnails:after { - clear: both; -} -.row-fluid .thumbnails { - margin-left: 0; -} -.thumbnails > li { - float: left; - margin-bottom: 19px; - margin-left: 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 19px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: #555555; -} -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media-object { - display: block; -} -.media-heading { - margin: 0 0 5px; -} -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; -} -.media-list { - margin-left: 0; - list-style: none; -} -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 10.998px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; -} -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.badge { - padding-left: 9px; - padding-right: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} -.label:empty, -.badge:empty { - display: none; -} -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 19px; - margin-bottom: 19px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.accordion { - margin-bottom: 19px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-toggle { - cursor: pointer; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 19px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - line-height: 1; -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); - border-radius: 5px; -} -.carousel-indicators .active { - background-color: #fff; -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; - line-height: 19px; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 28.5px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit li { - line-height: 28.5px; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} -.affix { - position: fixed; -} -/*! - * Bootstrap Responsive v2.3.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -@-ms-viewport { - width: device-width; -} -.hidden { - display: none; - visibility: hidden; -} -.visible-phone { - display: none !important; -} -.visible-tablet { - display: none !important; -} -.hidden-desktop { - display: none !important; -} -.visible-desktop { - display: inherit !important; -} -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: inherit !important; - } - .hidden-print { - display: none !important; - } -} -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 1156px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 1056px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 956px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 856px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 756px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 656px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 556px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 456px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 356px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 256px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 156px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 56px; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 1156px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 1056px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 956px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 856px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 756px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 656px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 556px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 456px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 356px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 256px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 156px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 710px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 648px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 586px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 524px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 462px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 400px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 338px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 276px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 214px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 152px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 90px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 28px; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 710px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 648px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 586px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 524px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 462px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 400px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 338px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 276px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 214px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 152px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 90px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 28px; - } -} -@media (max-width: 767px) { - body { - padding-left: 20px; - padding-right: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 29px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 19px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-left: 10px; - padding-right: 10px; - } - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 19px; - } - .navbar-fixed-bottom { - margin-top: 19px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 9.5px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .nav > li > a:focus, - .nav-collapse .dropdown-menu a:hover, - .nav-collapse .dropdown-menu a:focus { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .nav > li > a:focus, - .navbar-inverse .nav-collapse .dropdown-menu a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:focus { - background-color: #111111; - } - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 9.5px 15px; - margin: 9.5px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } -} -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-extend.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-extend.css deleted file mode 100644 index 3918954..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-extend.css +++ /dev/null @@ -1,102 +0,0 @@ -body { - background-color: #f9faf5; -} -.container { - width: 80%; -} -.main { - background-color: white; - padding: 18px; - -moz-box-shadow: 0 0 3px #888; - -webkit-box-shadow: 0 0 3px #888; - box-shadow: 0 0 3px #888; -} -.underline { - border-bottom: 1.5px solid #eeeeee; -} -.header { - margin-top: 15px; - margin-bottom: 15px; - margin-left: 0px; - margin-right: 0px; -} -.spc-navbar { - margin-top: 15px; - margin-bottom: 5px; - margin-left: 0px; - margin-right: 0px; -} -.spc-navbar .nav-pills { - margin-bottom: 0px; - font-size: 12px; -} -.spc-navbar .nav-pills > li > a { - padding-top: 2.5px; - padding-bottom: 2.5px; -} -.underline { - border-bottom: 1.5px solid #eeeeee; -} -.spc-page-title h1, -.spc-page-title h2, -.spc-page-title h3, -.spc-page-title h4 { - font-weight: normal; - border-bottom: 1.5px solid #eeeeee; -} -.tags .btn { - border: none; - font-size: 9.5px; - font-weight: bold; -} -.spc-search-result-title h1, -.spc-search-result-title h2, -.spc-search-result-title h3, -.spc-search-result-title h4 { - font-weight: normal; -} -.spc-snippet-header { - margin-bottom: 5px; -} -.spc-snippet-info { - padding-top: 10px; -} -.spc-snippet-info .dl-horizontal { - margin: 5px; -} -.spc-snippet-info .dl-horizontal dt { - font-weight: normal; -} -.spc-snippet-body { - padding: 10px; -} -.spc-snippet-body .accordion-group { - border: none; -} -.spc-snippet-body .accordion-heading { - text-transform: uppercase; - font-size: 14px; - border-bottom: 1px solid #e5e5e5; -} -.spc-snippet-body .accordion-heading .accordion-toggle { - padding-top: 10px; - padding-bottom: 5px; -} -.spc-rightsidebar { - color: #555555; -} -.spc-rightsidebar .navigation { - padding: 2px 10px; - font-size: 11.9px; -} -.spc-rightsidebar .navigation .nav-title { - font-weight: bold; - text-transform: uppercase; -} -.spc-rightsidebar .navigation li { - margin: 5px; -} -.footer { - padding: 5px; - font-size: small; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings-white.png b/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484..0000000 Binary files a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings.png b/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings.png deleted file mode 100644 index a996999..0000000 Binary files a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings.png and /dev/null differ diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/scipy_org_logo.png b/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/scipy_org_logo.png deleted file mode 100644 index a45cbe0..0000000 Binary files a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/scipy_org_logo.png and /dev/null differ diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/js/copybutton.js b/kima/vendor/spleaf/doc/source/_theme/scipy/static/js/copybutton.js deleted file mode 100644 index 01ee2ba..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/js/copybutton.js +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2014 PSF. Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -// File originates from the cpython source found in Doc/tools/sphinxext/static/copybutton.js - -$(document).ready(function() { - /* Add a [>>>] button on the top-right corner of code samples to hide - * the >>> and ... prompts and the output and thus make the code - * copyable. */ - var div = $('.highlight-python .highlight,' + - '.highlight-default .highlight,' + - '.highlight-python3 .highlight') - var pre = div.find('pre'); - - // get the styles from the current theme - pre.parent().parent().css('position', 'relative'); - var hide_text = 'Hide the prompts and output'; - var show_text = 'Show the prompts and output'; - var border_width = pre.css('border-top-width'); - var border_style = pre.css('border-top-style'); - var border_color = pre.css('border-top-color'); - var button_styles = { - 'cursor':'pointer', 'position': 'absolute', 'top': '0', 'right': '0', - 'border-color': border_color, 'border-style': border_style, - 'border-width': border_width, 'color': border_color, 'text-size': '75%', - 'font-family': 'monospace', 'padding-left': '0.2em', 'padding-right': '0.2em', - 'border-radius': '0 3px 0 0' - } - - // create and add the button to all the code blocks that contain >>> - div.each(function(index) { - var jthis = $(this); - if (jthis.find('.gp').length > 0) { - var button = $('>>>'); - button.css(button_styles) - button.attr('title', hide_text); - button.data('hidden', 'false'); - jthis.prepend(button); - } - // tracebacks (.gt) contain bare text elements that need to be - // wrapped in a span to work with .nextUntil() (see later) - jthis.find('pre:has(.gt)').contents().filter(function() { - return ((this.nodeType == 3) && (this.data.trim().length > 0)); - }).wrap(''); - }); - - // define the behavior of the button when it's clicked - $('.copybutton').click(function(e){ - e.preventDefault(); - var button = $(this); - if (button.data('hidden') === 'false') { - // hide the code output - button.parent().find('.go, .gp, .gt').hide(); - button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'hidden'); - button.css('text-decoration', 'line-through'); - button.attr('title', show_text); - button.data('hidden', 'true'); - } else { - // show the code output - button.parent().find('.go, .gp, .gt').show(); - button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'visible'); - button.css('text-decoration', 'none'); - button.attr('title', hide_text); - button.data('hidden', 'false'); - } - }); -}); - diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/accordion.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/accordion.less deleted file mode 100644 index d63523b..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/accordion.less +++ /dev/null @@ -1,34 +0,0 @@ -// -// Accordion -// -------------------------------------------------- - - -// Parent container -.accordion { - margin-bottom: @baseLineHeight; -} - -// Group == heading + body -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - .border-radius(@baseBorderRadius); -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -// General toggle styles -.accordion-toggle { - cursor: pointer; -} - -// Inner needs the styles because you can't animate properly with any styles on the element -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/alerts.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/alerts.less deleted file mode 100644 index 0116b19..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/alerts.less +++ /dev/null @@ -1,79 +0,0 @@ -// -// Alerts -// -------------------------------------------------- - - -// Base styles -// ------------------------- - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: @baseLineHeight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - background-color: @warningBackground; - border: 1px solid @warningBorder; - .border-radius(@baseBorderRadius); -} -.alert, -.alert h4 { - // Specified for the h4 to prevent conflicts of changing @headingsColor - color: @warningText; -} -.alert h4 { - margin: 0; -} - -// Adjust close link position -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: @baseLineHeight; -} - - -// Alternate styles -// ------------------------- - -.alert-success { - background-color: @successBackground; - border-color: @successBorder; - color: @successText; -} -.alert-success h4 { - color: @successText; -} -.alert-danger, -.alert-error { - background-color: @errorBackground; - border-color: @errorBorder; - color: @errorText; -} -.alert-danger h4, -.alert-error h4 { - color: @errorText; -} -.alert-info { - background-color: @infoBackground; - border-color: @infoBorder; - color: @infoText; -} -.alert-info h4 { - color: @infoText; -} - - -// Block alerts -// ------------------------- - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/bootstrap.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/bootstrap.less deleted file mode 100644 index b56327a..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/bootstrap.less +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * Bootstrap v2.3.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -// Core variables and mixins -@import "variables.less"; // Modify this for custom colors, font-sizes, etc -@import "mixins.less"; - -// CSS Reset -@import "reset.less"; - -// Grid system and page structure -@import "scaffolding.less"; -@import "grid.less"; -@import "layouts.less"; - -// Base CSS -@import "type.less"; -@import "code.less"; -@import "forms.less"; -@import "tables.less"; - -// Components: common -@import "sprites.less"; -@import "dropdowns.less"; -@import "wells.less"; -@import "component-animations.less"; -@import "close.less"; - -// Components: Buttons & Alerts -@import "buttons.less"; -@import "button-groups.less"; -@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less - -// Components: Nav -@import "navs.less"; -@import "navbar.less"; -@import "breadcrumbs.less"; -@import "pagination.less"; -@import "pager.less"; - -// Components: Popovers -@import "modals.less"; -@import "tooltip.less"; -@import "popovers.less"; - -// Components: Misc -@import "thumbnails.less"; -@import "media.less"; -@import "labels-badges.less"; -@import "progress-bars.less"; -@import "accordion.less"; -@import "carousel.less"; -@import "hero-unit.less"; - -// Utility classes -@import "utilities.less"; // Has to be last to override when necessary diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/breadcrumbs.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/breadcrumbs.less deleted file mode 100644 index f753df6..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/breadcrumbs.less +++ /dev/null @@ -1,24 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 @baseLineHeight; - list-style: none; - background-color: #f5f5f5; - .border-radius(@baseBorderRadius); - > li { - display: inline-block; - .ie7-inline-block(); - text-shadow: 0 1px 0 @white; - > .divider { - padding: 0 5px; - color: #ccc; - } - } - > .active { - color: @grayLight; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/button-groups.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/button-groups.less deleted file mode 100644 index 55cdc60..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/button-groups.less +++ /dev/null @@ -1,229 +0,0 @@ -// -// Button groups -// -------------------------------------------------- - - -// Make the div behave like a button -.btn-group { - position: relative; - display: inline-block; - .ie7-inline-block(); - font-size: 0; // remove as part 1 of font-size inline-block hack - vertical-align: middle; // match .btn alignment given font-size hack above - white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) - .ie7-restore-left-whitespace(); -} - -// Space out series of button groups -.btn-group + .btn-group { - margin-left: 5px; -} - -// Optional: Group multiple button groups together for a toolbar -.btn-toolbar { - font-size: 0; // Hack to remove whitespace that results from using inline-block - margin-top: @baseLineHeight / 2; - margin-bottom: @baseLineHeight / 2; - > .btn + .btn, - > .btn-group + .btn, - > .btn + .btn-group { - margin-left: 5px; - } -} - -// Float them, remove border radius, then re-add to first and last elements -.btn-group > .btn { - position: relative; - .border-radius(0); -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack -} - -// Reset fonts for other sizes -.btn-group > .btn-mini { - font-size: @fontSizeMini; -} -.btn-group > .btn-small { - font-size: @fontSizeSmall; -} -.btn-group > .btn-large { - font-size: @fontSizeLarge; -} - -// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match -.btn-group > .btn:first-child { - margin-left: 0; - .border-top-left-radius(@baseBorderRadius); - .border-bottom-left-radius(@baseBorderRadius); -} -// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - .border-top-right-radius(@baseBorderRadius); - .border-bottom-right-radius(@baseBorderRadius); -} -// Reset corners for large buttons -.btn-group > .btn.large:first-child { - margin-left: 0; - .border-top-left-radius(@borderRadiusLarge); - .border-bottom-left-radius(@borderRadiusLarge); -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - .border-top-right-radius(@borderRadiusLarge); - .border-bottom-right-radius(@borderRadiusLarge); -} - -// On hover/focus/active, bring the proper btn to front -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -// On active and open, don't show outline -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - - - -// Split button dropdowns -// ---------------------- - -// Give the line between buttons some depth -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - .box-shadow(~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} - -.btn-group.open { - - // The clickable button for toggling the menu - // Remove the gradient and set the same inset shadow as the :active state - .dropdown-toggle { - background-image: none; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); - } - - // Keep the hover's background when dropdown is open - .btn.dropdown-toggle { - background-color: @btnBackgroundHighlight; - } - .btn-primary.dropdown-toggle { - background-color: @btnPrimaryBackgroundHighlight; - } - .btn-warning.dropdown-toggle { - background-color: @btnWarningBackgroundHighlight; - } - .btn-danger.dropdown-toggle { - background-color: @btnDangerBackgroundHighlight; - } - .btn-success.dropdown-toggle { - background-color: @btnSuccessBackgroundHighlight; - } - .btn-info.dropdown-toggle { - background-color: @btnInfoBackgroundHighlight; - } - .btn-inverse.dropdown-toggle { - background-color: @btnInverseBackgroundHighlight; - } -} - - -// Reposition the caret -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -// Carets in other button sizes -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} -// Upside down carets for .dropup -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - - - -// Account for other colors -.btn-primary, -.btn-warning, -.btn-danger, -.btn-info, -.btn-success, -.btn-inverse { - .caret { - border-top-color: @white; - border-bottom-color: @white; - } -} - - - -// Vertical button groups -// ---------------------- - -.btn-group-vertical { - display: inline-block; // makes buttons only take up the width they need - .ie7-inline-block(); -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - .border-radius(0); -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - .border-radius(@baseBorderRadius @baseBorderRadius 0 0); -} -.btn-group-vertical > .btn:last-child { - .border-radius(0 0 @baseBorderRadius @baseBorderRadius); -} -.btn-group-vertical > .btn-large:first-child { - .border-radius(@borderRadiusLarge @borderRadiusLarge 0 0); -} -.btn-group-vertical > .btn-large:last-child { - .border-radius(0 0 @borderRadiusLarge @borderRadiusLarge); -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/buttons.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/buttons.less deleted file mode 100644 index 4cd4d86..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/buttons.less +++ /dev/null @@ -1,228 +0,0 @@ -// -// Buttons -// -------------------------------------------------- - - -// Base styles -// -------------------------------------------------- - -// Core -.btn { - display: inline-block; - .ie7-inline-block(); - padding: 4px 12px; - margin-bottom: 0; // For input.btn - font-size: @baseFontSize; - line-height: @baseLineHeight; - text-align: center; - vertical-align: middle; - cursor: pointer; - .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); - border: 1px solid @btnBorder; - *border: 0; // Remove the border to prevent IE7's black border on input:focus - border-bottom-color: darken(@btnBorder, 10%); - .border-radius(@baseBorderRadius); - .ie7-restore-left-whitespace(); // Give IE7 some love - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - - // Hover/focus state - &:hover, - &:focus { - color: @grayDark; - text-decoration: none; - background-position: 0 -15px; - - // transition is only when going to hover/focus, otherwise the background - // behind the gradient (there for IE<=9 fallback) gets mismatched - .transition(background-position .1s linear); - } - - // Focus state for keyboard and accessibility - &:focus { - .tab-focus(); - } - - // Active state - &.active, - &:active { - background-image: none; - outline: 0; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); - } - - // Disabled state - &.disabled, - &[disabled] { - cursor: default; - background-image: none; - .opacity(65); - .box-shadow(none); - } - -} - - - -// Button Sizes -// -------------------------------------------------- - -// Large -.btn-large { - padding: @paddingLarge; - font-size: @fontSizeLarge; - .border-radius(@borderRadiusLarge); -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -// Small -.btn-small { - padding: @paddingSmall; - font-size: @fontSizeSmall; - .border-radius(@borderRadiusSmall); -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -// Mini -.btn-mini { - padding: @paddingMini; - font-size: @fontSizeMini; - .border-radius(@borderRadiusSmall); -} - - -// Block button -// ------------------------- - -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - .box-sizing(border-box); -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} - - - -// Alternate buttons -// -------------------------------------------------- - -// Provide *some* extra contrast for those who can get it -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255,255,255,.75); -} - -// Set the backgrounds -// ------------------------- -.btn-primary { - .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight); -} -// Warning appears are orange -.btn-warning { - .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight); -} -// Danger and error appear as red -.btn-danger { - .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight); -} -// Success appears as green -.btn-success { - .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight); -} -// Info appears as a neutral blue -.btn-info { - .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight); -} -// Inverse appears as dark gray -.btn-inverse { - .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight); -} - - -// Cross-browser Jank -// -------------------------------------------------- - -button.btn, -input[type="submit"].btn { - - // Firefox 3.6 only I believe - &::-moz-focus-inner { - padding: 0; - border: 0; - } - - // IE7 has some default padding on button controls - *padding-top: 3px; - *padding-bottom: 3px; - - &.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; - } - &.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; - } - &.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; - } -} - - -// Link buttons -// -------------------------------------------------- - -// Make a button look and behave like a link -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - .box-shadow(none); -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: @linkColor; - .border-radius(0); -} -.btn-link:hover, -.btn-link:focus { - color: @linkColorHover; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: @grayDark; - text-decoration: none; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/carousel.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/carousel.less deleted file mode 100644 index 55bc050..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/carousel.less +++ /dev/null @@ -1,158 +0,0 @@ -// -// Carousel -// -------------------------------------------------- - - -.carousel { - position: relative; - margin-bottom: @baseLineHeight; - line-height: 1; -} - -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} - -.carousel-inner { - - > .item { - display: none; - position: relative; - .transition(.6s ease-in-out left); - - // Account for jankitude on images - > img, - > a > img { - display: block; - line-height: 1; - } - } - - > .active, - > .next, - > .prev { display: block; } - - > .active { - left: 0; - } - - > .next, - > .prev { - position: absolute; - top: 0; - width: 100%; - } - - > .next { - left: 100%; - } - > .prev { - left: -100%; - } - > .next.left, - > .prev.right { - left: 0; - } - - > .active.left { - left: -100%; - } - > .active.right { - left: 100%; - } - -} - -// Left/right controls for nav -// --------------------------- - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: @white; - text-align: center; - background: @grayDarker; - border: 3px solid @white; - .border-radius(23px); - .opacity(50); - - // we can't have this transition here - // because webkit cancels the carousel - // animation if you trip this while - // in the middle of another animation - // ;_; - // .transition(opacity .2s linear); - - // Reposition the right one - &.right { - left: auto; - right: 15px; - } - - // Hover/focus state - &:hover, - &:focus { - color: @white; - text-decoration: none; - .opacity(90); - } -} - -// Carousel indicator pips -// ----------------------------- -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; - - li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255,255,255,.25); - border-radius: 5px; - } - .active { - background-color: #fff; - } -} - -// Caption for text below images -// ----------------------------- - -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: @grayDark; - background: rgba(0,0,0,.75); -} -.carousel-caption h4, -.carousel-caption p { - color: @white; - line-height: @baseLineHeight; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/close.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/close.less deleted file mode 100644 index 4c626bd..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/close.less +++ /dev/null @@ -1,32 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: @baseLineHeight; - color: @black; - text-shadow: 0 1px 0 rgba(255,255,255,1); - .opacity(20); - &:hover, - &:focus { - color: @black; - text-decoration: none; - cursor: pointer; - .opacity(40); - } -} - -// Additional properties for button version -// iOS requires the button element instead of an anchor tag. -// If you want the anchor version, it requires `href="#"`. -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/code.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/code.less deleted file mode 100644 index 266a926..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/code.less +++ /dev/null @@ -1,61 +0,0 @@ -// -// Code (inline and blocK) -// -------------------------------------------------- - - -// Inline and block code styles -code, -pre { - padding: 0 3px 2px; - #font > #family > .monospace; - font-size: @baseFontSize - 2; - color: @grayDark; - .border-radius(3px); -} - -// Inline code -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} - -// Blocks of code -pre { - display: block; - padding: (@baseLineHeight - 1) / 2; - margin: 0 0 @baseLineHeight / 2; - font-size: @baseFontSize - 1; // 14px to 13px - line-height: @baseLineHeight; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; // fallback for IE7-8 - border: 1px solid rgba(0,0,0,.15); - .border-radius(@baseBorderRadius); - - // Make prettyprint styles more spaced out for readability - &.prettyprint { - margin-bottom: @baseLineHeight; - } - - // Account for some code outputs that place code tags in pre tags - code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; - } -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/component-animations.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/component-animations.less deleted file mode 100644 index d614263..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/component-animations.less +++ /dev/null @@ -1,22 +0,0 @@ -// -// Component animations -// -------------------------------------------------- - - -.fade { - opacity: 0; - .transition(opacity .15s linear); - &.in { - opacity: 1; - } -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - .transition(height .35s ease); - &.in { - height: auto; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/dropdowns.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/dropdowns.less deleted file mode 100644 index bbfe3fd..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/dropdowns.less +++ /dev/null @@ -1,237 +0,0 @@ -// -// Dropdown menus -// -------------------------------------------------- - - -// Use the .menu class on any
  • element within the topbar or ul.tabs and you'll get some superfancy dropdowns -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - // The caret makes the toggle a bit too tall in IE7 - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -// Dropdown arrow/caret -// -------------------- -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid @black; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -// Place the caret -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -// The dropdown menu (ul) -// ---------------------- -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: @zindexDropdown; - display: none; // none by default, but block on "open" of the menu - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; // override default ul - list-style: none; - background-color: @dropdownBackground; - border: 1px solid #ccc; // Fallback for IE7-8 - border: 1px solid @dropdownBorder; - *border-right-width: 2px; - *border-bottom-width: 2px; - .border-radius(6px); - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - - // Aligns the dropdown menu to right - &.pull-right { - right: 0; - left: auto; - } - - // Dividers (basically an hr) within the dropdown - .divider { - .nav-divider(@dropdownDividerTop, @dropdownDividerBottom); - } - - // Links within the dropdown menu - > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: @baseLineHeight; - color: @dropdownLinkColor; - white-space: nowrap; - } -} - -// Hover/Focus state -// ----------- -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - text-decoration: none; - color: @dropdownLinkColorHover; - #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%)); -} - -// Active state -// ------------ -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: @dropdownLinkColorActive; - text-decoration: none; - outline: 0; - #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%)); -} - -// Disabled state -// -------------- -// Gray out text and ensure the hover/focus state remains gray -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: @grayLight; -} -// Nuke hover/focus effects -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - .reset-filter(); - cursor: default; -} - -// Open state for the dropdown -// --------------------------- -.open { - // IE7's z-index only goes to the nearest positioned ancestor, which would - // make the menu appear below buttons that appeared later on the page - *z-index: @zindexDropdown; - - & > .dropdown-menu { - display: block; - } -} - -// Right aligned dropdowns -// --------------------------- -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// ------------------------------------------------------ -// Just add .dropup after the standard .dropdown class and you're set, bro. -// TODO: abstract this so that the navbar fixed styles are not placed here? -.dropup, -.navbar-fixed-bottom .dropdown { - // Reverse the caret - .caret { - border-top: 0; - border-bottom: 4px solid @black; - content: ""; - } - // Different positioning for bottom up menu - .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; - } -} - -// Sub menus -// --------------------------- -.dropdown-submenu { - position: relative; -} -// Default dropdowns -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - .border-radius(0 6px 6px 6px); -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -// Dropups -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - .border-radius(5px 5px 5px 0); -} - -// Caret to indicate there is a submenu -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: darken(@dropdownBackground, 20%); - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: @dropdownLinkColorHover; -} - -// Left aligned submenus -.dropdown-submenu.pull-left { - // Undo the float - // Yes, this is awkward since .pull-left adds a float, but it sticks to our conventions elsewhere. - float: none; - - // Positioning the submenu - > .dropdown-menu { - left: -100%; - margin-left: 10px; - .border-radius(6px 0 6px 6px); - } -} - -// Tweak nav headers -// ----------------- -// Increase padding from 15px to 20px on sides -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} - -// Typeahead -// --------- -.typeahead { - z-index: 1051; - margin-top: 2px; // give it some space to breathe - .border-radius(@baseBorderRadius); -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/forms.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/forms.less deleted file mode 100644 index 14bf4dd..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/forms.less +++ /dev/null @@ -1,690 +0,0 @@ -// -// Forms -// -------------------------------------------------- - - -// GENERAL STYLES -// -------------- - -// Make all forms have space below them -form { - margin: 0 0 @baseLineHeight; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -// Groups of fields with labels on top (legends) -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - line-height: @baseLineHeight * 2; - color: @grayDark; - border: 0; - border-bottom: 1px solid #e5e5e5; - - // Small - small { - font-size: @baseLineHeight * .75; - color: @grayLight; - } -} - -// Set font for forms -label, -input, -button, -select, -textarea { - #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here -} -input, -button, -select, -textarea { - font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element) -} - -// Identify controls by their labels -label { - display: block; - margin-bottom: 5px; -} - -// Form controls -// ------------------------- - -// Shared size and type resets -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: @baseLineHeight; - padding: 4px 6px; - margin-bottom: @baseLineHeight / 2; - font-size: @baseFontSize; - line-height: @baseLineHeight; - color: @gray; - .border-radius(@inputBorderRadius); - vertical-align: middle; -} - -// Reset appearance properties for textual inputs and textarea -// Declare width for legacy (can't be on input[type=*] selectors or it's too specific) -input, -textarea, -.uneditable-input { - width: 206px; // plus 12px padding and 2px border -} -// Reset height since textareas have rows -textarea { - height: auto; -} -// Everything else -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: @inputBackground; - border: 1px solid @inputBorder; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - .transition(~"border linear .2s, box-shadow linear .2s"); - - // Focus state - &:focus { - border-color: rgba(82,168,236,.8); - outline: 0; - outline: thin dotted \9; /* IE6-9 */ - .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)"); - } -} - -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; /* IE7 */ - margin-top: 1px \9; /* IE8-9 */ - line-height: normal; -} - -// Reset width of input images, buttons, radios, checkboxes -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; // Override of generic input selector -} - -// Set the height of select and file controls to match text inputs -select, -input[type="file"] { - height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; /* For IE7, add top margin to align select with labels */ - line-height: @inputHeight; -} - -// Make select elements obey height by applying a border -select { - width: 220px; // default input width + 10px of padding that doesn't get applied - border: 1px solid @inputBorder; - background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color -} - -// Make multiple select elements height not fixed -select[multiple], -select[size] { - height: auto; -} - -// Focus for select, file, radio, and checkbox -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - .tab-focus(); -} - - -// Uneditable inputs -// ------------------------- - -// Make uneditable inputs look inactive -.uneditable-input, -.uneditable-textarea { - color: @grayLight; - background-color: darken(@inputBackground, 1%); - border-color: @inputBorder; - .box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); - cursor: not-allowed; -} - -// For text that needs to appear as an input but should not be an input -.uneditable-input { - overflow: hidden; // prevent text from wrapping, but still cut it off like an input does - white-space: nowrap; -} - -// Make uneditable textareas behave like a textarea -.uneditable-textarea { - width: auto; - height: auto; -} - - -// Placeholder -// ------------------------- - -// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector -input, -textarea { - .placeholder(); -} - - -// CHECKBOXES & RADIOS -// ------------------- - -// Indent the labels to position radios/checkboxes as hanging -.radio, -.checkbox { - min-height: @baseLineHeight; // clear the floating input if there is no label text - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -// Move the options list down to align with labels -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; // has to be padding because margin collaspes -} - -// Radios and checkboxes on same line -// TODO v3: Convert .inline to .control-inline -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; // space out consecutive inline controls -} - - - -// INPUT SIZES -// ----------- - -// General classes for quick sizes -.input-mini { width: 60px; } -.input-small { width: 90px; } -.input-medium { width: 150px; } -.input-large { width: 210px; } -.input-xlarge { width: 270px; } -.input-xxlarge { width: 530px; } - -// Grid style input sizes -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -// Redeclare since the fluid row class is more specific -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -// Ensure input-prepend/append never wraps -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - - - -// GRID SIZING FOR INPUTS -// ---------------------- - -// Grid sizes -#grid > .input(@gridColumnWidth, @gridGutterWidth); - -// Control row for multiple inputs per line -.controls-row { - .clearfix(); // Clear the float from controls -} - -// Float to collapse white-space for proper grid alignment -.controls-row [class*="span"], -// Redeclare the fluid grid collapse since we undo the float for inputs -.row-fluid .controls-row [class*="span"] { - float: left; -} -// Explicitly set top padding on all checkboxes/radios, not just first-child -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - - - - -// DISABLED STATE -// -------------- - -// Disabled and read-only inputs -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: @inputDisabledBackground; -} -// Explicitly reset the colors here -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - - - - -// FORM FIELD FEEDBACK STATES -// -------------------------- - -// Warning -.control-group.warning { - .formFieldState(@warningText, @warningText, @warningBackground); -} -// Error -.control-group.error { - .formFieldState(@errorText, @errorText, @errorBackground); -} -// Success -.control-group.success { - .formFieldState(@successText, @successText, @successBackground); -} -// Success -.control-group.info { - .formFieldState(@infoText, @infoText, @infoBackground); -} - -// HTML5 invalid states -// Shares styles with the .control-group.error above -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; - &:focus { - border-color: darken(#ee5f5b, 10%); - @shadow: 0 0 6px lighten(#ee5f5b, 20%); - .box-shadow(@shadow); - } -} - - - -// FORM ACTIONS -// ------------ - -.form-actions { - padding: (@baseLineHeight - 1) 20px @baseLineHeight; - margin-top: @baseLineHeight; - margin-bottom: @baseLineHeight; - background-color: @formActionsBackground; - border-top: 1px solid #e5e5e5; - .clearfix(); // Adding clearfix to allow for .pull-right button containers -} - - - -// HELP TEXT -// --------- - -.help-block, -.help-inline { - color: lighten(@textColor, 15%); // lighten the text some for contrast -} - -.help-block { - display: block; // account for any element using help-block - margin-bottom: @baseLineHeight / 2; -} - -.help-inline { - display: inline-block; - .ie7-inline-block(); - vertical-align: middle; - padding-left: 5px; -} - - - -// INPUT GROUPS -// ------------ - -// Allow us to put symbols and text within the input field for a cleaner look -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: @baseLineHeight / 2; - vertical-align: middle; - font-size: 0; // white space collapse hack - white-space: nowrap; // Prevent span and input from separating - - // Reset the white space collapse hack - input, - select, - .uneditable-input, - .dropdown-menu, - .popover { - font-size: @baseFontSize; - } - - input, - select, - .uneditable-input { - position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness - margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms - *margin-left: 0; - vertical-align: top; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - // Make input on top when focused so blue border and shadow always show - &:focus { - z-index: 2; - } - } - .add-on { - display: inline-block; - width: auto; - height: @baseLineHeight; - min-width: 16px; - padding: 4px 5px; - font-size: @baseFontSize; - font-weight: normal; - line-height: @baseLineHeight; - text-align: center; - text-shadow: 0 1px 0 @white; - background-color: @grayLighter; - border: 1px solid #ccc; - } - .add-on, - .btn, - .btn-group > .dropdown-toggle { - vertical-align: top; - .border-radius(0); - } - .active { - background-color: lighten(@green, 30); - border-color: @green; - } -} - -.input-prepend { - .add-on, - .btn { - margin-right: -1px; - } - .add-on:first-child, - .btn:first-child { - // FYI, `.btn:first-child` accounts for a button group that's prepended - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } -} - -.input-append { - input, - select, - .uneditable-input { - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - + .btn-group .btn:last-child { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on, - .btn, - .btn-group { - margin-left: -1px; - } - .add-on:last-child, - .btn:last-child, - .btn-group:last-child > .dropdown-toggle { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } -} - -// Remove all border-radius for inputs with both prepend and append -.input-prepend.input-append { - input, - select, - .uneditable-input { - .border-radius(0); - + .btn-group .btn { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on:first-child, - .btn:first-child { - margin-right: -1px; - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } - .add-on:last-child, - .btn:last-child { - margin-left: -1px; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - .btn-group:first-child { - margin-left: 0; - } -} - - - - -// SEARCH FORM -// ----------- - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; // Remove the default margin on all inputs - .border-radius(15px); -} - -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - .border-radius(0); // Override due to specificity -} -.form-search .input-append .search-query { - .border-radius(14px 0 0 14px); -} -.form-search .input-append .btn { - .border-radius(0 14px 14px 0); -} -.form-search .input-prepend .search-query { - .border-radius(0 14px 14px 0); -} -.form-search .input-prepend .btn { - .border-radius(14px 0 0 14px); -} - - - - -// HORIZONTAL & VERTICAL FORMS -// --------------------------- - -// Common properties -// ----------------- - -.form-search, -.form-inline, -.form-horizontal { - input, - textarea, - select, - .help-inline, - .uneditable-input, - .input-prepend, - .input-append { - display: inline-block; - .ie7-inline-block(); - margin-bottom: 0; - vertical-align: middle; - } - // Re-hide hidden elements due to specifity - .hide { - display: none; - } -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -// Remove margin for input-prepend/-append -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -// Inline checkbox/radio labels (remove padding on left) -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -// Remove float and margin, set to inline-block -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - - -// Margin to space out fieldsets -.control-group { - margin-bottom: @baseLineHeight / 2; -} - -// Legend collapses margin, so next element is responsible for spacing -legend + .control-group { - margin-top: @baseLineHeight; - -webkit-margin-top-collapse: separate; -} - -// Horizontal-specific styles -// -------------------------- - -.form-horizontal { - // Increase spacing between groups - .control-group { - margin-bottom: @baseLineHeight; - .clearfix(); - } - // Float the labels left - .control-label { - float: left; - width: @horizontalComponentOffset - 20; - padding-top: 5px; - text-align: right; - } - // Move over all input controls and content - .controls { - // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend - // don't inherit the margin of the parent, in this case .controls - *display: inline-block; - *padding-left: 20px; - margin-left: @horizontalComponentOffset; - *margin-left: 0; - &:first-child { - *padding-left: @horizontalComponentOffset; - } - } - // Remove bottom margin on block level help text since that's accounted for on .control-group - .help-block { - margin-bottom: 0; - } - // And apply it only to .help-block instances that follow a form control - input, - select, - textarea, - .uneditable-input, - .input-prepend, - .input-append { - + .help-block { - margin-top: @baseLineHeight / 2; - } - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: @horizontalComponentOffset; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/grid.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/grid.less deleted file mode 100644 index 750d203..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/grid.less +++ /dev/null @@ -1,21 +0,0 @@ -// -// Grid system -// -------------------------------------------------- - - -// Fixed (940px) -#grid > .core(@gridColumnWidth, @gridGutterWidth); - -// Fluid (940px) -#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); - -// Reset utility classes due to specificity -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/hero-unit.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/hero-unit.less deleted file mode 100644 index 763d86a..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/hero-unit.less +++ /dev/null @@ -1,25 +0,0 @@ -// -// Hero unit -// -------------------------------------------------- - - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: @baseLineHeight * 1.5; - color: @heroUnitLeadColor; - background-color: @heroUnitBackground; - .border-radius(6px); - h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: @heroUnitHeadingColor; - letter-spacing: -1px; - } - li { - line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/labels-badges.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/labels-badges.less deleted file mode 100644 index bc321fe..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/labels-badges.less +++ /dev/null @@ -1,84 +0,0 @@ -// -// Labels and badges -// -------------------------------------------------- - - -// Base classes -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: @baseFontSize * .846; - font-weight: bold; - line-height: 14px; // ensure proper line-height if floated - color: @white; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - background-color: @grayLight; -} -// Set unique padding and border-radii -.label { - .border-radius(3px); -} -.badge { - padding-left: 9px; - padding-right: 9px; - .border-radius(9px); -} - -// Empty labels/badges collapse -.label, -.badge { - &:empty { - display: none; - } -} - -// Hover/focus state, but only for links -a { - &.label:hover, - &.label:focus, - &.badge:hover, - &.badge:focus { - color: @white; - text-decoration: none; - cursor: pointer; - } -} - -// Colors -// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute) -.label, -.badge { - // Important (red) - &-important { background-color: @errorText; } - &-important[href] { background-color: darken(@errorText, 10%); } - // Warnings (orange) - &-warning { background-color: @orange; } - &-warning[href] { background-color: darken(@orange, 10%); } - // Success (green) - &-success { background-color: @successText; } - &-success[href] { background-color: darken(@successText, 10%); } - // Info (turquoise) - &-info { background-color: @infoText; } - &-info[href] { background-color: darken(@infoText, 10%); } - // Inverse (black) - &-inverse { background-color: @grayDark; } - &-inverse[href] { background-color: darken(@grayDark, 10%); } -} - -// Quick fix for labels/badges in buttons -.btn { - .label, - .badge { - position: relative; - top: -1px; - } -} -.btn-mini { - .label, - .badge { - top: 0; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/layouts.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/layouts.less deleted file mode 100644 index 24a2062..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/layouts.less +++ /dev/null @@ -1,16 +0,0 @@ -// -// Layouts -// -------------------------------------------------- - - -// Container (centered, fixed-width layouts) -.container { - .container-fixed(); -} - -// Fluid layouts (left aligned, with sidebar, min- & max-width content) -.container-fluid { - padding-right: @gridGutterWidth; - padding-left: @gridGutterWidth; - .clearfix(); -} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/media.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/media.less deleted file mode 100644 index e461e44..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/media.less +++ /dev/null @@ -1,55 +0,0 @@ -// Media objects -// Source: http://stubbornella.org/content/?p=497 -// -------------------------------------------------- - - -// Common styles -// ------------------------- - -// Clear the floats -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -// Proper spacing between instances of .media -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} - -// For images and videos, set to block -.media-object { - display: block; -} - -// Reset margins on headings for tighter default spacing -.media-heading { - margin: 0 0 5px; -} - - -// Media image alignment -// ------------------------- - -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; -} - - -// Media list variation -// ------------------------- - -// Undo default ul/ol styles -.media-list { - margin-left: 0; - list-style: none; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/mixins.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/mixins.less deleted file mode 100644 index 79d8892..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/mixins.less +++ /dev/null @@ -1,702 +0,0 @@ -// -// Mixins -// -------------------------------------------------- - - -// UTILITY MIXINS -// -------------------------------------------------- - -// Clearfix -// -------- -// For clearing floats like a boss h5bp.com/q -.clearfix { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - // Fixes Opera/contenteditable bug: - // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 - line-height: 0; - } - &:after { - clear: both; - } -} - -// Webkit-style focus -// ------------------ -.tab-focus() { - // Default - outline: thin dotted #333; - // Webkit - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -// Center-align a block level element -// ---------------------------------- -.center-block() { - display: block; - margin-left: auto; - margin-right: auto; -} - -// IE7 inline-block -// ---------------- -.ie7-inline-block() { - *display: inline; /* IE7 inline-block hack */ - *zoom: 1; -} - -// IE7 likes to collapse whitespace on either side of the inline-block elements. -// Ems because we're attempting to match the width of a space character. Left -// version is for form buttons, which typically come after other elements, and -// right version is for icons, which come before. Applying both is ok, but it will -// mean that space between those elements will be .6em (~2 space characters) in IE7, -// instead of the 1 space in other browsers. -.ie7-restore-left-whitespace() { - *margin-left: .3em; - - &:first-child { - *margin-left: 0; - } -} - -.ie7-restore-right-whitespace() { - *margin-right: .3em; -} - -// Sizing shortcuts -// ------------------------- -.size(@height, @width) { - width: @width; - height: @height; -} -.square(@size) { - .size(@size, @size); -} - -// Placeholder text -// ------------------------- -.placeholder(@color: @placeholderText) { - &:-moz-placeholder { - color: @color; - } - &:-ms-input-placeholder { - color: @color; - } - &::-webkit-input-placeholder { - color: @color; - } -} - -// Text overflow -// ------------------------- -// Requires inline-block or block for proper styling -.text-overflow() { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -// CSS image replacement -// ------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - - -// FONTS -// -------------------------------------------------- - -#font { - #family { - .serif() { - font-family: @serifFontFamily; - } - .sans-serif() { - font-family: @sansFontFamily; - } - .monospace() { - font-family: @monoFontFamily; - } - } - .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - font-size: @size; - font-weight: @weight; - line-height: @lineHeight; - } - .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .sans-serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .monospace; - #font > .shorthand(@size, @weight, @lineHeight); - } -} - - -// FORMS -// -------------------------------------------------- - -// Block level inputs -.input-block-level { - display: block; - width: 100%; - min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - .box-sizing(border-box); // Makes inputs behave like true block-level elements -} - - - -// Mixin for form field states -.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) { - // Set the text color - .control-label, - .help-block, - .help-inline { - color: @textColor; - } - // Style inputs accordingly - .checkbox, - .radio, - input, - select, - textarea { - color: @textColor; - } - input, - select, - textarea { - border-color: @borderColor; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work - &:focus { - border-color: darken(@borderColor, 10%); - @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%); - .box-shadow(@shadow); - } - } - // Give a small background color for input-prepend/-append - .input-prepend .add-on, - .input-append .add-on { - color: @textColor; - background-color: @backgroundColor; - border-color: @textColor; - } -} - - - -// CSS3 PROPERTIES -// -------------------------------------------------- - -// Border Radius -.border-radius(@radius) { - -webkit-border-radius: @radius; - -moz-border-radius: @radius; - border-radius: @radius; -} - -// Single Corner Border Radius -.border-top-left-radius(@radius) { - -webkit-border-top-left-radius: @radius; - -moz-border-radius-topleft: @radius; - border-top-left-radius: @radius; -} -.border-top-right-radius(@radius) { - -webkit-border-top-right-radius: @radius; - -moz-border-radius-topright: @radius; - border-top-right-radius: @radius; -} -.border-bottom-right-radius(@radius) { - -webkit-border-bottom-right-radius: @radius; - -moz-border-radius-bottomright: @radius; - border-bottom-right-radius: @radius; -} -.border-bottom-left-radius(@radius) { - -webkit-border-bottom-left-radius: @radius; - -moz-border-radius-bottomleft: @radius; - border-bottom-left-radius: @radius; -} - -// Single Side Border Radius -.border-top-radius(@radius) { - .border-top-right-radius(@radius); - .border-top-left-radius(@radius); -} -.border-right-radius(@radius) { - .border-top-right-radius(@radius); - .border-bottom-right-radius(@radius); -} -.border-bottom-radius(@radius) { - .border-bottom-right-radius(@radius); - .border-bottom-left-radius(@radius); -} -.border-left-radius(@radius) { - .border-top-left-radius(@radius); - .border-bottom-left-radius(@radius); -} - -// Drop shadows -.box-shadow(@shadow) { - -webkit-box-shadow: @shadow; - -moz-box-shadow: @shadow; - box-shadow: @shadow; -} - -// Transitions -.transition(@transition) { - -webkit-transition: @transition; - -moz-transition: @transition; - -o-transition: @transition; - transition: @transition; -} -.transition-delay(@transition-delay) { - -webkit-transition-delay: @transition-delay; - -moz-transition-delay: @transition-delay; - -o-transition-delay: @transition-delay; - transition-delay: @transition-delay; -} -.transition-duration(@transition-duration) { - -webkit-transition-duration: @transition-duration; - -moz-transition-duration: @transition-duration; - -o-transition-duration: @transition-duration; - transition-duration: @transition-duration; -} - -// Transformations -.rotate(@degrees) { - -webkit-transform: rotate(@degrees); - -moz-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); - -o-transform: rotate(@degrees); - transform: rotate(@degrees); -} -.scale(@ratio) { - -webkit-transform: scale(@ratio); - -moz-transform: scale(@ratio); - -ms-transform: scale(@ratio); - -o-transform: scale(@ratio); - transform: scale(@ratio); -} -.translate(@x, @y) { - -webkit-transform: translate(@x, @y); - -moz-transform: translate(@x, @y); - -ms-transform: translate(@x, @y); - -o-transform: translate(@x, @y); - transform: translate(@x, @y); -} -.skew(@x, @y) { - -webkit-transform: skew(@x, @y); - -moz-transform: skew(@x, @y); - -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885 - -o-transform: skew(@x, @y); - transform: skew(@x, @y); - -webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319 -} -.translate3d(@x, @y, @z) { - -webkit-transform: translate3d(@x, @y, @z); - -moz-transform: translate3d(@x, @y, @z); - -o-transform: translate3d(@x, @y, @z); - transform: translate3d(@x, @y, @z); -} - -// Backface visibility -// Prevent browsers from flickering when using CSS 3D transforms. -// Default value is `visible`, but can be changed to `hidden -// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples -.backface-visibility(@visibility){ - -webkit-backface-visibility: @visibility; - -moz-backface-visibility: @visibility; - backface-visibility: @visibility; -} - -// Background clipping -// Heads up: FF 3.6 and under need "padding" instead of "padding-box" -.background-clip(@clip) { - -webkit-background-clip: @clip; - -moz-background-clip: @clip; - background-clip: @clip; -} - -// Background sizing -.background-size(@size) { - -webkit-background-size: @size; - -moz-background-size: @size; - -o-background-size: @size; - background-size: @size; -} - - -// Box sizing -.box-sizing(@boxmodel) { - -webkit-box-sizing: @boxmodel; - -moz-box-sizing: @boxmodel; - box-sizing: @boxmodel; -} - -// User select -// For selecting text on the page -.user-select(@select) { - -webkit-user-select: @select; - -moz-user-select: @select; - -ms-user-select: @select; - -o-user-select: @select; - user-select: @select; -} - -// Resize anything -.resizable(@direction) { - resize: @direction; // Options: horizontal, vertical, both - overflow: auto; // Safari fix -} - -// CSS3 Content Columns -.content-columns(@columnCount, @columnGap: @gridGutterWidth) { - -webkit-column-count: @columnCount; - -moz-column-count: @columnCount; - column-count: @columnCount; - -webkit-column-gap: @columnGap; - -moz-column-gap: @columnGap; - column-gap: @columnGap; -} - -// Optional hyphenation -.hyphens(@mode: auto) { - word-wrap: break-word; - -webkit-hyphens: @mode; - -moz-hyphens: @mode; - -ms-hyphens: @mode; - -o-hyphens: @mode; - hyphens: @mode; -} - -// Opacity -.opacity(@opacity) { - opacity: @opacity / 100; - filter: ~"alpha(opacity=@{opacity})"; -} - - - -// BACKGROUNDS -// -------------------------------------------------- - -// Add an alphatransparency value to any background or border color (via Elyse Holladay) -#translucent { - .background(@color: @white, @alpha: 1) { - background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - } - .border(@color: @white, @alpha: 1) { - border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - .background-clip(padding-box); - } -} - -// Gradient Bar Colors for buttons and alerts -.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - color: @textColor; - text-shadow: @textShadow; - #gradient > .vertical(@primaryColor, @secondaryColor); - border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%); - border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%); -} - -// Gradients -#gradient { - .horizontal(@startColor: #555, @endColor: #333) { - background-color: @endColor; - background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10 - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down - } - .vertical(@startColor: #555, @endColor: #333) { - background-color: mix(@startColor, @endColor, 60%); - background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down - } - .directional(@startColor: #555, @endColor: #333, @deg: 45deg) { - background-color: @endColor; - background-repeat: repeat-x; - background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10 - } - .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback - } - - .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback - } - .radial(@innerColor: #555, @outerColor: #333) { - background-color: @outerColor; - background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor)); - background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor); - background-image: -moz-radial-gradient(circle, @innerColor, @outerColor); - background-image: -o-radial-gradient(circle, @innerColor, @outerColor); - background-repeat: no-repeat; - } - .striped(@color: #555, @angle: 45deg) { - background-color: @color; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - } -} -// Reset filters for IE -.reset-filter() { - filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); -} - - - -// COMPONENT MIXINS -// -------------------------------------------------- - -// Horizontal dividers -// ------------------------- -// Dividers (basically an hr) within dropdowns and nav lists -.nav-divider(@top: #e5e5e5, @bottom: @white) { - // IE7 needs a set width since we gave a height. Restricting just - // to IE7 to keep the 1px left/right space in other browsers. - // It is unclear where IE is getting the extra space that we need - // to negative-margin away, but so it goes. - *width: 100%; - height: 1px; - margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px - *margin: -5px 0 5px; - overflow: hidden; - background-color: @top; - border-bottom: 1px solid @bottom; -} - -// Button backgrounds -// ------------------ -.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - // gradientBar will set the background to a pleasing blend of these, to support IE<=9 - .gradientBar(@startColor, @endColor, @textColor, @textShadow); - *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - .reset-filter(); - - // in these cases the gradient won't cover the background, so we override - &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] { - color: @textColor; - background-color: @endColor; - *background-color: darken(@endColor, 5%); - } - - // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves - &:active, - &.active { - background-color: darken(@endColor, 10%) e("\9"); - } -} - -// Navbar vertical align -// ------------------------- -// Vertically center elements in the navbar. -// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin. -.navbarVerticalAlign(@elementHeight) { - margin-top: (@navbarHeight - @elementHeight) / 2; -} - - - -// Grid System -// ----------- - -// Centered container element -.container-fixed() { - margin-right: auto; - margin-left: auto; - .clearfix(); -} - -// Table columns -.tableColumns(@columnSpan: 1) { - float: none; // undo default grid column styles - width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells - margin-left: 0; // undo default grid column styles -} - -// Make a Grid -// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior -.makeRow() { - margin-left: @gridGutterWidth * -1; - .clearfix(); -} -.makeColumn(@columns: 1, @offset: 0) { - float: left; - margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2); - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); -} - -// The Grid -#grid { - - .core (@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1)); - } - - .span (@columns) { - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); - } - - .row { - margin-left: @gridGutterWidth * -1; - .clearfix(); - } - - [class*="span"] { - float: left; - min-height: 1px; // prevent collapsing columns - margin-left: @gridGutterWidth; - } - - // Set the container width, and override it for fixed navbars in media queries - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { .span(@gridColumns); } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - - } - - .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offset@{index}:first-child { .offsetFirstChild(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%); - } - - .offsetFirstChild (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - - .span (@columns) { - width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)); - *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%); - } - - .row-fluid { - width: 100%; - .clearfix(); - [class*="span"] { - .input-block-level(); - float: left; - margin-left: @fluidGridGutterWidth; - *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - [class*="span"]:first-child { - margin-left: 0; - } - - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @fluidGridGutterWidth; - } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - } - - } - - .input(@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .span(@columns) { - width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14; - } - - input, - textarea, - .uneditable-input { - margin-left: 0; // override margin-left from core grid system - } - - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @gridGutterWidth; - } - - // generate .spanX - .spanX (@gridColumns); - - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/modals.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/modals.less deleted file mode 100644 index 8e272d4..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/modals.less +++ /dev/null @@ -1,95 +0,0 @@ -// -// Modals -// -------------------------------------------------- - -// Background -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: @zindexModalBackdrop; - background-color: @black; - // Fade for backdrop - &.fade { opacity: 0; } -} - -.modal-backdrop, -.modal-backdrop.fade.in { - .opacity(80); -} - -// Base modal -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: @zindexModal; - width: 560px; - margin-left: -280px; - background-color: @white; - border: 1px solid #999; - border: 1px solid rgba(0,0,0,.3); - *border: 1px solid #999; /* IE6-7 */ - .border-radius(6px); - .box-shadow(0 3px 7px rgba(0,0,0,0.3)); - .background-clip(padding-box); - // Remove focus outline from opened modal - outline: none; - - &.fade { - .transition(e('opacity .3s linear, top .3s ease-out')); - top: -25%; - } - &.fade.in { top: 10%; } -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; - // Close icon - .close { margin-top: 2px; } - // Heading - h3 { - margin: 0; - line-height: 30px; - } -} - -// Body (where all modal content resides) -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -// Remove bottom margin if need be -.modal-form { - margin-bottom: 0; -} - -// Footer (for actions) -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; // right align buttons - background-color: #f5f5f5; - border-top: 1px solid #ddd; - .border-radius(0 0 6px 6px); - .box-shadow(inset 0 1px 0 @white); - .clearfix(); // clear it in case folks use .pull-* classes on buttons - - // Properly space out buttons - .btn + .btn { - margin-left: 5px; - margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs - } - // but override that for button groups - .btn-group .btn + .btn { - margin-left: -1px; - } - // and override it for block buttons as well - .btn-block + .btn-block { - margin-left: 0; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navbar.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navbar.less deleted file mode 100644 index 028fcad..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navbar.less +++ /dev/null @@ -1,497 +0,0 @@ -// -// Navbars (Redux) -// -------------------------------------------------- - - -// COMMON STYLES -// ------------- - -// Base class and wrapper -.navbar { - overflow: visible; - margin-bottom: @baseLineHeight; - - // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar - *position: relative; - *z-index: 2; -} - -// Inner for background effects -// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present -.navbar-inner { - min-height: @navbarHeight; - padding-left: 20px; - padding-right: 20px; - #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground); - border: 1px solid @navbarBorder; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 4px rgba(0,0,0,.065)); - - // Prevent floats from breaking the navbar - .clearfix(); -} - -// Set width to auto for default container -// We then reset it for fixed navbars in the #gridSystem mixin -.navbar .container { - width: auto; -} - -// Override the default collapsed state -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - - -// Brand: website or project name -// ------------------------- -.navbar .brand { - float: left; - display: block; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2); - margin-left: -20px; // negative indent to left-align the text down the page - font-size: 20px; - font-weight: 200; - color: @navbarBrandColor; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; - &:hover, - &:focus { - text-decoration: none; - } -} - -// Plain text in topbar -// ------------------------- -.navbar-text { - margin-bottom: 0; - line-height: @navbarHeight; - color: @navbarText; -} - -// Janky solution for now to account for links outside the .nav -// ------------------------- -.navbar-link { - color: @navbarLinkColor; - &:hover, - &:focus { - color: @navbarLinkColorHover; - } -} - -// Dividers in navbar -// ------------------------- -.navbar .divider-vertical { - height: @navbarHeight; - margin: 0 9px; - border-left: 1px solid @navbarBackground; - border-right: 1px solid @navbarBackgroundHighlight; -} - -// Buttons in navbar -// ------------------------- -.navbar .btn, -.navbar .btn-group { - .navbarVerticalAlign(30px); // Vertically center in navbar -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; // then undo the margin here so we don't accidentally double it -} - -// Navbar forms -// ------------------------- -.navbar-form { - margin-bottom: 0; // remove default bottom margin - .clearfix(); - input, - select, - .radio, - .checkbox { - .navbarVerticalAlign(30px); // Vertically center in navbar - } - input, - select, - .btn { - display: inline-block; - margin-bottom: 0; - } - input[type="image"], - input[type="checkbox"], - input[type="radio"] { - margin-top: 3px; - } - .input-append, - .input-prepend { - margin-top: 5px; - white-space: nowrap; // prevent two items from separating within a .navbar-form that has .pull-left - input { - margin-top: 0; // remove the margin on top since it's on the parent - } - } -} - -// Navbar search -// ------------------------- -.navbar-search { - position: relative; - float: left; - .navbarVerticalAlign(30px); // Vertically center in navbar - margin-bottom: 0; - .search-query { - margin-bottom: 0; - padding: 4px 14px; - #font > .sans-serif(13px, normal, 1); - .border-radius(15px); // redeclare because of specificity of the type attribute - } -} - - - -// Static navbar -// ------------------------- - -.navbar-static-top { - position: static; - margin-bottom: 0; // remove 18px margin for default navbar - .navbar-inner { - .border-radius(0); - } -} - - - -// Fixed navbar -// ------------------------- - -// Shared (top/bottom) styles -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: @zindexFixedNavbar; - margin-bottom: 0; // remove 18px margin for default navbar -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - .border-radius(0); -} - -// Reset container width -// Required here as we reset the width earlier on and the grid mixins don't override early enough -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - #grid > .core > .span(@gridColumns); -} - -// Fixed to top -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top, -.navbar-static-top { - .navbar-inner { - .box-shadow(~"0 1px 10px rgba(0,0,0,.1)"); - } -} - -// Fixed to bottom -.navbar-fixed-bottom { - bottom: 0; - .navbar-inner { - .box-shadow(~"0 -1px 10px rgba(0,0,0,.1)"); - } -} - - - -// NAVIGATION -// ---------- - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; // redeclare due to specificity - margin-right: 0; // remove margin on float right nav -} -.navbar .nav > li { - float: left; -} - -// Links -.navbar .nav > li > a { - float: none; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2); - color: @navbarLinkColor; - text-decoration: none; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -// Hover/focus -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active - color: @navbarLinkColorHover; - text-decoration: none; -} - -// Active nav items -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: @navbarLinkColorActive; - text-decoration: none; - background-color: @navbarLinkBackgroundActive; - .box-shadow(inset 0 3px 8px rgba(0,0,0,.125)); -} - -// Navbar button for toggling navbar items in responsive layouts -// These definitions need to come after '.navbar .btn' -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%)); - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)"); -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - .border-radius(1px); - .box-shadow(0 1px 0 rgba(0,0,0,.25)); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - - - -// Dropdown menus -// -------------- - -// Menu position and menu carets -.navbar .nav > li > .dropdown-menu { - &:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: @dropdownBorder; - position: absolute; - top: -7px; - left: 9px; - } - &:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid @dropdownBackground; - position: absolute; - top: -6px; - left: 10px; - } -} -// Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .nav > li > .dropdown-menu { - &:before { - border-top: 7px solid #ccc; - border-top-color: @dropdownBorder; - border-bottom: 0; - bottom: -7px; - top: auto; - } - &:after { - border-top: 6px solid @dropdownBackground; - border-bottom: 0; - bottom: -6px; - top: auto; - } -} - -// Caret should match text color on hover/focus -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: @navbarLinkColorHover; - border-bottom-color: @navbarLinkColorHover; -} - -// Remove background color from open dropdown -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarLinkBackgroundActive; - color: @navbarLinkColorActive; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarLinkColor; - border-bottom-color: @navbarLinkColor; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarLinkColorActive; - border-bottom-color: @navbarLinkColorActive; -} - -// Right aligned menus need alt position -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; - &:before { - left: auto; - right: 12px; - } - &:after { - left: auto; - right: 13px; - } - .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - .border-radius(6px 0 6px 6px); - } -} - - -// Inverted navbar -// ------------------------- - -.navbar-inverse { - - .navbar-inner { - #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground); - border-color: @navbarInverseBorder; - } - - .brand, - .nav > li > a { - color: @navbarInverseLinkColor; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - &:hover, - &:focus { - color: @navbarInverseLinkColorHover; - } - } - - .brand { - color: @navbarInverseBrandColor; - } - - .navbar-text { - color: @navbarInverseText; - } - - .nav > li > a:focus, - .nav > li > a:hover { - background-color: @navbarInverseLinkBackgroundHover; - color: @navbarInverseLinkColorHover; - } - - .nav .active > a, - .nav .active > a:hover, - .nav .active > a:focus { - color: @navbarInverseLinkColorActive; - background-color: @navbarInverseLinkBackgroundActive; - } - - // Inline text links - .navbar-link { - color: @navbarInverseLinkColor; - &:hover, - &:focus { - color: @navbarInverseLinkColorHover; - } - } - - // Dividers in navbar - .divider-vertical { - border-left-color: @navbarInverseBackground; - border-right-color: @navbarInverseBackgroundHighlight; - } - - // Dropdowns - .nav li.dropdown.open > .dropdown-toggle, - .nav li.dropdown.active > .dropdown-toggle, - .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarInverseLinkBackgroundActive; - color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > a:hover .caret, - .nav li.dropdown > a:focus .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColor; - border-bottom-color: @navbarInverseLinkColor; - } - .nav li.dropdown.open > .dropdown-toggle .caret, - .nav li.dropdown.active > .dropdown-toggle .caret, - .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; - } - - // Navbar search - .navbar-search { - .search-query { - color: @white; - background-color: @navbarInverseSearchBackground; - border-color: @navbarInverseSearchBorder; - .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)"); - .transition(none); - .placeholder(@navbarInverseSearchPlaceholderColor); - - // Focus states (we use .focused since IE7-8 and down doesn't support :focus) - &:focus, - &.focused { - padding: 5px 15px; - color: @grayDark; - text-shadow: 0 1px 0 @white; - background-color: @navbarInverseSearchBackgroundFocus; - border: 0; - .box-shadow(0 0 3px rgba(0,0,0,.15)); - outline: 0; - } - } - } - - // Navbar collapse button - .btn-navbar { - .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%)); - } - -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navs.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navs.less deleted file mode 100644 index 01cd805..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navs.less +++ /dev/null @@ -1,409 +0,0 @@ -// -// Navs -// -------------------------------------------------- - - -// BASE CLASS -// ---------- - -.nav { - margin-left: 0; - margin-bottom: @baseLineHeight; - list-style: none; -} - -// Make links block level -.nav > li > a { - display: block; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: @grayLighter; -} - -// Prevent IE8 from misplacing imgs -// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 -.nav > li > a > img { - max-width: none; -} - -// Redeclare pull classes because of specifity -.nav > .pull-right { - float: right; -} - -// Nav headers (for dropdowns and lists) -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: @baseLineHeight; - color: @grayLight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - text-transform: uppercase; -} -// Space them out when they follow another list item (link) -.nav li + .nav-header { - margin-top: 9px; -} - - - -// NAV LIST -// -------- - -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255,255,255,.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: @white; - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - background-color: @linkColor; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -// Dividers (basically an hr) within the dropdown -.nav-list .divider { - .nav-divider(); -} - - - -// TABS AND PILLS -// ------------- - -// Common styles -.nav-tabs, -.nav-pills { - .clearfix(); -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; // keeps the overall height an even number -} - -// TABS -// ---- - -// Give the tabs something to sit on -.nav-tabs { - border-bottom: 1px solid #ddd; -} -// Make the list-items overlay the bottom border -.nav-tabs > li { - margin-bottom: -1px; -} -// Actual tabs (as links) -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: @baseLineHeight; - border: 1px solid transparent; - .border-radius(4px 4px 0 0); - &:hover, - &:focus { - border-color: @grayLighter @grayLighter #ddd; - } -} -// Active state, and it's :hover/:focus to override normal :hover/:focus -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: @gray; - background-color: @bodyBackground; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} - - -// PILLS -// ----- - -// Links rendered as pills -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - .border-radius(5px); -} - -// Active state -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: @white; - background-color: @linkColor; -} - - - -// STACKED NAV -// ----------- - -// Stacked tabs and pills -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; // no need for the gap between nav items -} - -// Tabs -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - .border-radius(0); -} -.nav-tabs.nav-stacked > li:first-child > a { - .border-top-radius(4px); -} -.nav-tabs.nav-stacked > li:last-child > a { - .border-bottom-radius(4px); -} -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - border-color: #ddd; - z-index: 2; -} - -// Pills -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; // decrease margin to match sizing of stacked tabs -} - - - -// DROPDOWNS -// --------- - -.nav-tabs .dropdown-menu { - .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu -} -.nav-pills .dropdown-menu { - .border-radius(6px); // make rounded corners match the pills -} - -// Default dropdown links -// ------------------------- -// Make carets use linkColor to start -.nav .dropdown-toggle .caret { - border-top-color: @linkColor; - border-bottom-color: @linkColor; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: @linkColorHover; - border-bottom-color: @linkColorHover; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -// Active dropdown links -// ------------------------- -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: @gray; - border-bottom-color: @gray; -} - -// Active:hover/:focus dropdown links -// ------------------------- -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} - -// Open dropdowns -// ------------------------- -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: @white; - background-color: @grayLight; - border-color: @grayLight; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: @white; - border-bottom-color: @white; - .opacity(100); -} - -// Dropdowns in stacked tabs -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: @grayLight; -} - - - -// TABBABLE -// -------- - - -// COMMON STYLES -// ------------- - -// Clear any floats -.tabbable { - .clearfix(); -} -.tab-content { - overflow: auto; // prevent content from running below tabs -} - -// Remove border on bottom, left, right -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -// Show/hide tabbable areas -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} - - -// BOTTOM -// ------ - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - .border-radius(0 0 4px 4px); - &:hover, - &:focus { - border-bottom-color: transparent; - border-top-color: #ddd; - } -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -// LEFT & RIGHT -// ------------ - -// Common styles -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -// Tabs on the left -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - .border-radius(4px 0 0 4px); -} -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: @grayLighter #ddd @grayLighter @grayLighter; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: @white; -} - -// Tabs on the right -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - .border-radius(0 4px 4px 0); -} -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: @grayLighter @grayLighter @grayLighter #ddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: @white; -} - - - -// DISABLED STATES -// --------------- - -// Gray out text -.nav > .disabled > a { - color: @grayLight; -} -// Nuke hover/focus effects -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - cursor: default; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pager.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pager.less deleted file mode 100644 index 1476188..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pager.less +++ /dev/null @@ -1,43 +0,0 @@ -// -// Pager pagination -// -------------------------------------------------- - - -.pager { - margin: @baseLineHeight 0; - list-style: none; - text-align: center; - .clearfix(); -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - .border-radius(15px); -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: @grayLight; - background-color: #fff; - cursor: default; -} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pagination.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pagination.less deleted file mode 100644 index a789db2..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pagination.less +++ /dev/null @@ -1,123 +0,0 @@ -// -// Pagination (multiple pages) -// -------------------------------------------------- - -// Space out pagination from surrounding content -.pagination { - margin: @baseLineHeight 0; -} - -.pagination ul { - // Allow for text-based alignment - display: inline-block; - .ie7-inline-block(); - // Reset default ul styles - margin-left: 0; - margin-bottom: 0; - // Visuals - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 2px rgba(0,0,0,.05)); -} -.pagination ul > li { - display: inline; // Remove list-style and block-level defaults -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; // Collapse white-space - padding: 4px 12px; - line-height: @baseLineHeight; - text-decoration: none; - background-color: @paginationBackground; - border: 1px solid @paginationBorder; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: @paginationActiveBackground; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: @grayLight; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: @grayLight; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - .border-left-radius(@baseBorderRadius); -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - .border-right-radius(@baseBorderRadius); -} - - -// Alignment -// -------------------------------------------------- - -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} - - -// Sizing -// -------------------------------------------------- - -// Large -.pagination-large { - ul > li > a, - ul > li > span { - padding: @paddingLarge; - font-size: @fontSizeLarge; - } - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusLarge); - } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusLarge); - } -} - -// Small and mini -.pagination-mini, -.pagination-small { - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusSmall); - } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusSmall); - } -} - -// Small -.pagination-small { - ul > li > a, - ul > li > span { - padding: @paddingSmall; - font-size: @fontSizeSmall; - } -} -// Mini -.pagination-mini { - ul > li > a, - ul > li > span { - padding: @paddingMini; - font-size: @fontSizeMini; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/popovers.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/popovers.less deleted file mode 100644 index aae35c8..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/popovers.less +++ /dev/null @@ -1,133 +0,0 @@ -// -// Popovers -// -------------------------------------------------- - - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: @zindexPopover; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; // Reset given new insertion method - background-color: @popoverBackground; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); - .border-radius(6px); - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - - // Overrides for proper insertion - white-space: normal; - - // Offset the popover to account for the popover arrow - &.top { margin-top: -10px; } - &.right { margin-left: 10px; } - &.bottom { margin-top: 10px; } - &.left { margin-left: -10px; } -} - -.popover-title { - margin: 0; // reset heading margin - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: @popoverTitleBackground; - border-bottom: 1px solid darken(@popoverTitleBackground, 5%); - .border-radius(5px 5px 0 0); - - &:empty { - display: none; - } -} - -.popover-content { - padding: 9px 14px; -} - -// Arrows -// -// .arrow is outer, .arrow:after is inner - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: @popoverArrowOuterWidth; -} -.popover .arrow:after { - border-width: @popoverArrowWidth; - content: ""; -} - -.popover { - &.top .arrow { - left: 50%; - margin-left: -@popoverArrowOuterWidth; - border-bottom-width: 0; - border-top-color: #999; // IE8 fallback - border-top-color: @popoverArrowOuterColor; - bottom: -@popoverArrowOuterWidth; - &:after { - bottom: 1px; - margin-left: -@popoverArrowWidth; - border-bottom-width: 0; - border-top-color: @popoverArrowColor; - } - } - &.right .arrow { - top: 50%; - left: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; - border-left-width: 0; - border-right-color: #999; // IE8 fallback - border-right-color: @popoverArrowOuterColor; - &:after { - left: 1px; - bottom: -@popoverArrowWidth; - border-left-width: 0; - border-right-color: @popoverArrowColor; - } - } - &.bottom .arrow { - left: 50%; - margin-left: -@popoverArrowOuterWidth; - border-top-width: 0; - border-bottom-color: #999; // IE8 fallback - border-bottom-color: @popoverArrowOuterColor; - top: -@popoverArrowOuterWidth; - &:after { - top: 1px; - margin-left: -@popoverArrowWidth; - border-top-width: 0; - border-bottom-color: @popoverArrowColor; - } - } - - &.left .arrow { - top: 50%; - right: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; - border-right-width: 0; - border-left-color: #999; // IE8 fallback - border-left-color: @popoverArrowOuterColor; - &:after { - right: 1px; - border-right-width: 0; - border-left-color: @popoverArrowColor; - bottom: -@popoverArrowWidth; - } - } - -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/progress-bars.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/progress-bars.less deleted file mode 100644 index 5e0c3dd..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/progress-bars.less +++ /dev/null @@ -1,122 +0,0 @@ -// -// Progress bars -// -------------------------------------------------- - - -// ANIMATIONS -// ---------- - -// Webkit -@-webkit-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Firefox -@-moz-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// IE9 -@-ms-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Opera -@-o-keyframes progress-bar-stripes { - from { background-position: 0 0; } - to { background-position: 40px 0; } -} - -// Spec -@keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - - - -// THE BARS -// -------- - -// Outer container -.progress { - overflow: hidden; - height: @baseLineHeight; - margin-bottom: @baseLineHeight; - #gradient > .vertical(#f5f5f5, #f9f9f9); - .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); - .border-radius(@baseBorderRadius); -} - -// Bar of progress -.progress .bar { - width: 0%; - height: 100%; - color: @white; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - #gradient > .vertical(#149bdf, #0480be); - .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); - .box-sizing(border-box); - .transition(width .6s ease); -} -.progress .bar + .bar { - .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)"); -} - -// Striped bars -.progress-striped .bar { - #gradient > .striped(#149bdf); - .background-size(40px 40px); -} - -// Call animation for the active one -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - - - -// COLORS -// ------ - -// Danger (red) -.progress-danger .bar, .progress .bar-danger { - #gradient > .vertical(#ee5f5b, #c43c35); -} -.progress-danger.progress-striped .bar, .progress-striped .bar-danger { - #gradient > .striped(#ee5f5b); -} - -// Success (green) -.progress-success .bar, .progress .bar-success { - #gradient > .vertical(#62c462, #57a957); -} -.progress-success.progress-striped .bar, .progress-striped .bar-success { - #gradient > .striped(#62c462); -} - -// Info (teal) -.progress-info .bar, .progress .bar-info { - #gradient > .vertical(#5bc0de, #339bb9); -} -.progress-info.progress-striped .bar, .progress-striped .bar-info { - #gradient > .striped(#5bc0de); -} - -// Warning (orange) -.progress-warning .bar, .progress .bar-warning { - #gradient > .vertical(lighten(@orange, 15%), @orange); -} -.progress-warning.progress-striped .bar, .progress-striped .bar-warning { - #gradient > .striped(lighten(@orange, 15%)); -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/reset.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/reset.less deleted file mode 100644 index 359e38b..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/reset.less +++ /dev/null @@ -1,216 +0,0 @@ -// -// Reset CSS -// Adapted from http://github.com/necolas/normalize.css -// -------------------------------------------------- - - -// Display in IE6-9 and FF3 -// ------------------------- - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -// Display block in IE6-9 and FF3 -// ------------------------- - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -// Prevents modern browsers from displaying 'audio' without controls -// ------------------------- - -audio:not([controls]) { - display: none; -} - -// Base settings -// ------------------------- - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -// Focus states -a:focus { - .tab-focus(); -} -// Hover & Active -a:hover, -a:active { - outline: 0; -} - -// Prevents sub and sup affecting line-height in all browsers -// ------------------------- - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} - -// Img border in a's and image quality -// ------------------------- - -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; /* Part 1: Set a maximum relative to the parent */ - width: auto\9; /* IE7-8 need help adjusting responsive images */ - height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -// Prevent max-width from affecting Google Maps -#map_canvas img, -.google-maps img { - max-width: none; -} - -// Forms -// ------------------------- - -// Font size in all browsers, margin changes, misc consistency -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; // Inner spacing ie IE6/7 - line-height: normal; // FF3/4 have !important on line-height in UA stylesheet -} -button::-moz-focus-inner, -input::-moz-focus-inner { // Inner padding and border oddities in FF3/4 - padding: 0; - border: 0; -} -button, -html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS. - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -input[type="search"] { // Appearance in Safari/Chrome - .box-sizing(content-box); - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5 -} -textarea { - overflow: auto; // Remove vertical scrollbar in IE6-9 - vertical-align: top; // Readability and alignment cross-browser -} - - -// Printing -// ------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css - -@media print { - - * { - text-shadow: none !important; - color: #000 !important; // Black prints faster: h5bp.com/s - background: transparent !important; - box-shadow: none !important; - } - - a, - a:visited { - text-decoration: underline; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - // Don't show links for images, or javascript/internal links - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - - thead { - display: table-header-group; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page { - margin: 0.5cm; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less deleted file mode 100644 index 4f35ba6..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less +++ /dev/null @@ -1,28 +0,0 @@ -// -// Responsive: Large desktop and up -// -------------------------------------------------- - - -@media (min-width: 1200px) { - - // Fixed grid - #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200); - - // Input grid - #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200); - - // Thumbnails - .thumbnails { - margin-left: -@gridGutterWidth1200; - } - .thumbnails > li { - margin-left: @gridGutterWidth1200; - } - .row-fluid .thumbnails { - margin-left: 0; - } - -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-767px-max.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-767px-max.less deleted file mode 100644 index 128f4ce..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-767px-max.less +++ /dev/null @@ -1,193 +0,0 @@ -// -// Responsive: Landscape phone to desktop/tablet -// -------------------------------------------------- - - -@media (max-width: 767px) { - - // Padding to set content in a bit - body { - padding-left: 20px; - padding-right: 20px; - } - // Negative indent the now static "fixed" navbar - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - // Remove padding on container given explicit padding set on body - .container-fluid { - padding: 0; - } - - // TYPOGRAPHY - // ---------- - // Reset horizontal dl - .dl-horizontal { - dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - dd { - margin-left: 0; - } - } - - // GRID & CONTAINERS - // ----------------- - // Remove width from containers - .container { - width: auto; - } - // Fluid rows - .row-fluid { - width: 100%; - } - // Undo negative margin on rows and thumbnails - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present - } - // Make all grid-sized elements block level again - [class*="span"], - .uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - .box-sizing(border-box); - } - .span12, - .row-fluid .span12 { - width: 100%; - .box-sizing(border-box); - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - - // FORM FIELDS - // ----------- - // Make span* classes full width - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - .input-block-level(); - } - // But don't let it screw up prepend/append inputs - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; // redeclare so they don't wrap to new lines - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - - // Modals - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - &.fade { top: -100px; } - &.fade.in { top: 20px; } - } - -} - - - -// UP TO LANDSCAPE PHONE -// --------------------- - -@media (max-width: 480px) { - - // Smooth out the collapsing/expanding nav - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); // activate the GPU - } - - // Block level the page header small tag for readability - .page-header h1 small { - display: block; - line-height: @baseLineHeight; - } - - // Update checkboxes for iOS - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - - // Remove the horizontal form styles - .form-horizontal { - .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - // Move over all input controls and content - .controls { - margin-left: 0; - } - // Move the options list down to align with labels - .control-list { - padding-top: 0; // has to be padding because margin collaspes - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: 10px; - padding-right: 10px; - } - } - - // Medias - // Reset float and spacing to stack - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - // Remove side margins since we stack instead of indent - .media-object { - margin-right: 0; - margin-left: 0; - } - - // Modals - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - - // Carousel - .carousel-caption { - position: static; - } - -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less deleted file mode 100644 index 8e8c486..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less +++ /dev/null @@ -1,19 +0,0 @@ -// -// Responsive: Tablet to desktop -// -------------------------------------------------- - - -@media (min-width: 768px) and (max-width: 979px) { - - // Fixed grid - #grid > .core(@gridColumnWidth768, @gridGutterWidth768); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); - - // Input grid - #grid > .input(@gridColumnWidth768, @gridGutterWidth768); - - // No need to reset .thumbnails here since it's the same @gridGutterWidth - -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-navbar.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-navbar.less deleted file mode 100644 index 21cd3ba..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-navbar.less +++ /dev/null @@ -1,189 +0,0 @@ -// -// Responsive: Navbar -// -------------------------------------------------- - - -// TABLETS AND BELOW -// ----------------- -@media (max-width: @navbarCollapseWidth) { - - // UNFIX THE TOPBAR - // ---------------- - // Remove any padding from the body - body { - padding-top: 0; - } - // Unfix the navbars - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: @baseLineHeight; - } - .navbar-fixed-bottom { - margin-top: @baseLineHeight; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - // Account for brand name - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - - // COLLAPSIBLE NAVBAR - // ------------------ - // Nav collapse clears brand - .nav-collapse { - clear: both; - } - // Block-level the nav - .nav-collapse .nav { - float: none; - margin: 0 0 (@baseLineHeight / 2); - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: @navbarText; - text-shadow: none; - } - // Nav and dropdown links in navbar - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: @navbarLinkColor; - .border-radius(3px); - } - // Buttons - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - .border-radius(@baseBorderRadius); - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .nav > li > a:focus, - .nav-collapse .dropdown-menu a:hover, - .nav-collapse .dropdown-menu a:focus { - background-color: @navbarBackground; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: @navbarInverseLinkColor; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .nav > li > a:focus, - .navbar-inverse .nav-collapse .dropdown-menu a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:focus { - background-color: @navbarInverseBackground; - } - // Buttons in the navbar - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - // Dropdowns in the navbar - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - .border-radius(0); - .box-shadow(none); - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu { - &:before, - &:after { - display: none; - } - } - // Forms in navbar - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: (@baseLineHeight / 2) 15px; - margin: (@baseLineHeight / 2) 0; - border-top: 1px solid @navbarBackground; - border-bottom: 1px solid @navbarBackground; - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)"); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: @navbarInverseBackground; - border-bottom-color: @navbarInverseBackground; - } - // Pull right (secondary) nav content - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - // Hide everything in the navbar save .brand and toggle button */ - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - // Navbar button - .navbar .btn-navbar { - display: block; - } - - // STATIC NAVBAR - // ------------- - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } - - -} - - -// DEFAULT DESKTOP -// --------------- - -@media (min-width: @navbarCollapseDesktopWidth) { - - // Required to make the collapsing navbar work on regular desktops - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } - -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-utilities.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-utilities.less deleted file mode 100644 index bf43e8e..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-utilities.less +++ /dev/null @@ -1,59 +0,0 @@ -// -// Responsive: Utility classes -// -------------------------------------------------- - - -// IE10 Metro responsive -// Required for Windows 8 Metro split-screen snapping with IE10 -// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ -@-ms-viewport{ - width: device-width; -} - -// Hide from screenreaders and browsers -// Credit: HTML5 Boilerplate -.hidden { - display: none; - visibility: hidden; -} - -// Visibility utilities - -// For desktops -.visible-phone { display: none !important; } -.visible-tablet { display: none !important; } -.hidden-phone { } -.hidden-tablet { } -.hidden-desktop { display: none !important; } -.visible-desktop { display: inherit !important; } - -// Tablets & small desktops only -@media (min-width: 768px) and (max-width: 979px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important ; } - // Show - .visible-tablet { display: inherit !important; } - // Hide - .hidden-tablet { display: none !important; } -} - -// Phones only -@media (max-width: 767px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important; } - // Show - .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior - // Hide - .hidden-phone { display: none !important; } -} - -// Print utilities -.visible-print { display: none !important; } -.hidden-print { } - -@media print { - .visible-print { display: inherit !important; } - .hidden-print { display: none !important; } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive.less deleted file mode 100644 index b8366de..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive.less +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * Bootstrap Responsive v2.3.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - - -// Responsive.less -// For phone and tablet devices -// ------------------------------------------------------------- - - -// REPEAT VARIABLES & MIXINS -// ------------------------- -// Required since we compile the responsive stuff separately - -@import "variables.less"; // Modify this for custom colors, font-sizes, etc -@import "mixins.less"; - - -// RESPONSIVE CLASSES -// ------------------ - -@import "responsive-utilities.less"; - - -// MEDIA QUERIES -// ------------------ - -// Large desktops -@import "responsive-1200px-min.less"; - -// Tablets to regular desktops -@import "responsive-768px-979px.less"; - -// Phones to portrait tablets and narrow desktops -@import "responsive-767px-max.less"; - - -// RESPONSIVE NAVBAR -// ------------------ - -// From 979px and below, show a button to toggle navbar contents -@import "responsive-navbar.less"; diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/scaffolding.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/scaffolding.less deleted file mode 100644 index f17e8ca..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/scaffolding.less +++ /dev/null @@ -1,53 +0,0 @@ -// -// Scaffolding -// -------------------------------------------------- - - -// Body reset -// ------------------------- - -body { - margin: 0; - font-family: @baseFontFamily; - font-size: @baseFontSize; - line-height: @baseLineHeight; - color: @textColor; - background-color: @bodyBackground; -} - - -// Links -// ------------------------- - -a { - color: @linkColor; - text-decoration: none; -} -a:hover, -a:focus { - color: @linkColorHover; - text-decoration: underline; -} - - -// Images -// ------------------------- - -// Rounded corners -.img-rounded { - .border-radius(6px); -} - -// Add polaroid-esque trim -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); - .box-shadow(0 1px 3px rgba(0,0,0,.1)); -} - -// Perfect circle -.img-circle { - .border-radius(500px); // crank the border-radius so it works with most reasonably sized images -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/sprites.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/sprites.less deleted file mode 100644 index 1812bf7..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/sprites.less +++ /dev/null @@ -1,197 +0,0 @@ -// -// Sprites -// -------------------------------------------------- - - -// ICONS -// ----- - -// All icons receive the styles of the tag with a base class -// of .i and are then given a unique class to add width, height, -// and background-position. Your resulting HTML will look like -// . - -// For the white version of the icons, just add the .icon-white class: -// - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - .ie7-restore-right-whitespace(); - line-height: 14px; - vertical-align: text-top; - background-image: url("@{iconSpritePath}"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("@{iconWhiteSpritePath}"); -} - -.icon-glass { background-position: 0 0; } -.icon-music { background-position: -24px 0; } -.icon-search { background-position: -48px 0; } -.icon-envelope { background-position: -72px 0; } -.icon-heart { background-position: -96px 0; } -.icon-star { background-position: -120px 0; } -.icon-star-empty { background-position: -144px 0; } -.icon-user { background-position: -168px 0; } -.icon-film { background-position: -192px 0; } -.icon-th-large { background-position: -216px 0; } -.icon-th { background-position: -240px 0; } -.icon-th-list { background-position: -264px 0; } -.icon-ok { background-position: -288px 0; } -.icon-remove { background-position: -312px 0; } -.icon-zoom-in { background-position: -336px 0; } -.icon-zoom-out { background-position: -360px 0; } -.icon-off { background-position: -384px 0; } -.icon-signal { background-position: -408px 0; } -.icon-cog { background-position: -432px 0; } -.icon-trash { background-position: -456px 0; } - -.icon-home { background-position: 0 -24px; } -.icon-file { background-position: -24px -24px; } -.icon-time { background-position: -48px -24px; } -.icon-road { background-position: -72px -24px; } -.icon-download-alt { background-position: -96px -24px; } -.icon-download { background-position: -120px -24px; } -.icon-upload { background-position: -144px -24px; } -.icon-inbox { background-position: -168px -24px; } -.icon-play-circle { background-position: -192px -24px; } -.icon-repeat { background-position: -216px -24px; } -.icon-refresh { background-position: -240px -24px; } -.icon-list-alt { background-position: -264px -24px; } -.icon-lock { background-position: -287px -24px; } // 1px off -.icon-flag { background-position: -312px -24px; } -.icon-headphones { background-position: -336px -24px; } -.icon-volume-off { background-position: -360px -24px; } -.icon-volume-down { background-position: -384px -24px; } -.icon-volume-up { background-position: -408px -24px; } -.icon-qrcode { background-position: -432px -24px; } -.icon-barcode { background-position: -456px -24px; } - -.icon-tag { background-position: 0 -48px; } -.icon-tags { background-position: -25px -48px; } // 1px off -.icon-book { background-position: -48px -48px; } -.icon-bookmark { background-position: -72px -48px; } -.icon-print { background-position: -96px -48px; } -.icon-camera { background-position: -120px -48px; } -.icon-font { background-position: -144px -48px; } -.icon-bold { background-position: -167px -48px; } // 1px off -.icon-italic { background-position: -192px -48px; } -.icon-text-height { background-position: -216px -48px; } -.icon-text-width { background-position: -240px -48px; } -.icon-align-left { background-position: -264px -48px; } -.icon-align-center { background-position: -288px -48px; } -.icon-align-right { background-position: -312px -48px; } -.icon-align-justify { background-position: -336px -48px; } -.icon-list { background-position: -360px -48px; } -.icon-indent-left { background-position: -384px -48px; } -.icon-indent-right { background-position: -408px -48px; } -.icon-facetime-video { background-position: -432px -48px; } -.icon-picture { background-position: -456px -48px; } - -.icon-pencil { background-position: 0 -72px; } -.icon-map-marker { background-position: -24px -72px; } -.icon-adjust { background-position: -48px -72px; } -.icon-tint { background-position: -72px -72px; } -.icon-edit { background-position: -96px -72px; } -.icon-share { background-position: -120px -72px; } -.icon-check { background-position: -144px -72px; } -.icon-move { background-position: -168px -72px; } -.icon-step-backward { background-position: -192px -72px; } -.icon-fast-backward { background-position: -216px -72px; } -.icon-backward { background-position: -240px -72px; } -.icon-play { background-position: -264px -72px; } -.icon-pause { background-position: -288px -72px; } -.icon-stop { background-position: -312px -72px; } -.icon-forward { background-position: -336px -72px; } -.icon-fast-forward { background-position: -360px -72px; } -.icon-step-forward { background-position: -384px -72px; } -.icon-eject { background-position: -408px -72px; } -.icon-chevron-left { background-position: -432px -72px; } -.icon-chevron-right { background-position: -456px -72px; } - -.icon-plus-sign { background-position: 0 -96px; } -.icon-minus-sign { background-position: -24px -96px; } -.icon-remove-sign { background-position: -48px -96px; } -.icon-ok-sign { background-position: -72px -96px; } -.icon-question-sign { background-position: -96px -96px; } -.icon-info-sign { background-position: -120px -96px; } -.icon-screenshot { background-position: -144px -96px; } -.icon-remove-circle { background-position: -168px -96px; } -.icon-ok-circle { background-position: -192px -96px; } -.icon-ban-circle { background-position: -216px -96px; } -.icon-arrow-left { background-position: -240px -96px; } -.icon-arrow-right { background-position: -264px -96px; } -.icon-arrow-up { background-position: -289px -96px; } // 1px off -.icon-arrow-down { background-position: -312px -96px; } -.icon-share-alt { background-position: -336px -96px; } -.icon-resize-full { background-position: -360px -96px; } -.icon-resize-small { background-position: -384px -96px; } -.icon-plus { background-position: -408px -96px; } -.icon-minus { background-position: -433px -96px; } -.icon-asterisk { background-position: -456px -96px; } - -.icon-exclamation-sign { background-position: 0 -120px; } -.icon-gift { background-position: -24px -120px; } -.icon-leaf { background-position: -48px -120px; } -.icon-fire { background-position: -72px -120px; } -.icon-eye-open { background-position: -96px -120px; } -.icon-eye-close { background-position: -120px -120px; } -.icon-warning-sign { background-position: -144px -120px; } -.icon-plane { background-position: -168px -120px; } -.icon-calendar { background-position: -192px -120px; } -.icon-random { background-position: -216px -120px; width: 16px; } -.icon-comment { background-position: -240px -120px; } -.icon-magnet { background-position: -264px -120px; } -.icon-chevron-up { background-position: -288px -120px; } -.icon-chevron-down { background-position: -313px -119px; } // 1px, 1px off -.icon-retweet { background-position: -336px -120px; } -.icon-shopping-cart { background-position: -360px -120px; } -.icon-folder-close { background-position: -384px -120px; width: 16px; } -.icon-folder-open { background-position: -408px -120px; width: 16px; } -.icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off -.icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off - -.icon-hdd { background-position: 0 -144px; } -.icon-bullhorn { background-position: -24px -144px; } -.icon-bell { background-position: -48px -144px; } -.icon-certificate { background-position: -72px -144px; } -.icon-thumbs-up { background-position: -96px -144px; } -.icon-thumbs-down { background-position: -120px -144px; } -.icon-hand-right { background-position: -144px -144px; } -.icon-hand-left { background-position: -168px -144px; } -.icon-hand-up { background-position: -192px -144px; } -.icon-hand-down { background-position: -216px -144px; } -.icon-circle-arrow-right { background-position: -240px -144px; } -.icon-circle-arrow-left { background-position: -264px -144px; } -.icon-circle-arrow-up { background-position: -288px -144px; } -.icon-circle-arrow-down { background-position: -312px -144px; } -.icon-globe { background-position: -336px -144px; } -.icon-wrench { background-position: -360px -144px; } -.icon-tasks { background-position: -384px -144px; } -.icon-filter { background-position: -408px -144px; } -.icon-briefcase { background-position: -432px -144px; } -.icon-fullscreen { background-position: -456px -144px; } diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tables.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tables.less deleted file mode 100644 index 0e35271..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tables.less +++ /dev/null @@ -1,244 +0,0 @@ -// -// Tables -// -------------------------------------------------- - - -// BASE TABLES -// ----------------- - -table { - max-width: 100%; - background-color: @tableBackground; - border-collapse: collapse; - border-spacing: 0; -} - -// BASELINE STYLES -// --------------- - -.table { - width: 100%; - margin-bottom: @baseLineHeight; - // Cells - th, - td { - padding: 8px; - line-height: @baseLineHeight; - text-align: left; - vertical-align: top; - border-top: 1px solid @tableBorder; - } - th { - font-weight: bold; - } - // Bottom align for column headings - thead th { - vertical-align: bottom; - } - // Remove top border from thead by default - caption + thead tr:first-child th, - caption + thead tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + thead tr:first-child td, - thead:first-child tr:first-child th, - thead:first-child tr:first-child td { - border-top: 0; - } - // Account for multiple tbody instances - tbody + tbody { - border-top: 2px solid @tableBorder; - } - - // Nesting - .table { - background-color: @bodyBackground; - } -} - - - -// CONDENSED TABLE W/ HALF PADDING -// ------------------------------- - -.table-condensed { - th, - td { - padding: 4px 5px; - } -} - - -// BORDERED VERSION -// ---------------- - -.table-bordered { - border: 1px solid @tableBorder; - border-collapse: separate; // Done so we can round those corners! - *border-collapse: collapse; // IE7 can't round corners anyway - border-left: 0; - .border-radius(@baseBorderRadius); - th, - td { - border-left: 1px solid @tableBorder; - } - // Prevent a double border - caption + thead tr:first-child th, - caption + tbody tr:first-child th, - caption + tbody tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + tbody tr:first-child th, - colgroup + tbody tr:first-child td, - thead:first-child tr:first-child th, - tbody:first-child tr:first-child th, - tbody:first-child tr:first-child td { - border-top: 0; - } - // For first th/td in the first row in the first thead or tbody - thead:first-child tr:first-child > th:first-child, - tbody:first-child tr:first-child > td:first-child, - tbody:first-child tr:first-child > th:first-child { - .border-top-left-radius(@baseBorderRadius); - } - // For last th/td in the first row in the first thead or tbody - thead:first-child tr:first-child > th:last-child, - tbody:first-child tr:first-child > td:last-child, - tbody:first-child tr:first-child > th:last-child { - .border-top-right-radius(@baseBorderRadius); - } - // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot - thead:last-child tr:last-child > th:first-child, - tbody:last-child tr:last-child > td:first-child, - tbody:last-child tr:last-child > th:first-child, - tfoot:last-child tr:last-child > td:first-child, - tfoot:last-child tr:last-child > th:first-child { - .border-bottom-left-radius(@baseBorderRadius); - } - // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot - thead:last-child tr:last-child > th:last-child, - tbody:last-child tr:last-child > td:last-child, - tbody:last-child tr:last-child > th:last-child, - tfoot:last-child tr:last-child > td:last-child, - tfoot:last-child tr:last-child > th:last-child { - .border-bottom-right-radius(@baseBorderRadius); - } - - // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot - tfoot + tbody:last-child tr:last-child td:first-child { - .border-bottom-left-radius(0); - } - tfoot + tbody:last-child tr:last-child td:last-child { - .border-bottom-right-radius(0); - } - - // Special fixes to round the left border on the first td/th - caption + thead tr:first-child th:first-child, - caption + tbody tr:first-child td:first-child, - colgroup + thead tr:first-child th:first-child, - colgroup + tbody tr:first-child td:first-child { - .border-top-left-radius(@baseBorderRadius); - } - caption + thead tr:first-child th:last-child, - caption + tbody tr:first-child td:last-child, - colgroup + thead tr:first-child th:last-child, - colgroup + tbody tr:first-child td:last-child { - .border-top-right-radius(@baseBorderRadius); - } - -} - - - - -// ZEBRA-STRIPING -// -------------- - -// Default zebra-stripe styles (alternating gray and transparent backgrounds) -.table-striped { - tbody { - > tr:nth-child(odd) > td, - > tr:nth-child(odd) > th { - background-color: @tableBackgroundAccent; - } - } -} - - -// HOVER EFFECT -// ------------ -// Placed here since it has to come after the potential zebra striping -.table-hover { - tbody { - tr:hover > td, - tr:hover > th { - background-color: @tableBackgroundHover; - } - } -} - - -// TABLE CELL SIZING -// ----------------- - -// Reset default grid behavior -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; // undo default grid column styles - margin-left: 0; // undo default grid column styles -} - -// Change the column widths to account for td/th padding -.table td, -.table th { - &.span1 { .tableColumns(1); } - &.span2 { .tableColumns(2); } - &.span3 { .tableColumns(3); } - &.span4 { .tableColumns(4); } - &.span5 { .tableColumns(5); } - &.span6 { .tableColumns(6); } - &.span7 { .tableColumns(7); } - &.span8 { .tableColumns(8); } - &.span9 { .tableColumns(9); } - &.span10 { .tableColumns(10); } - &.span11 { .tableColumns(11); } - &.span12 { .tableColumns(12); } -} - - - -// TABLE BACKGROUNDS -// ----------------- -// Exact selectors below required to override .table-striped - -.table tbody tr { - &.success > td { - background-color: @successBackground; - } - &.error > td { - background-color: @errorBackground; - } - &.warning > td { - background-color: @warningBackground; - } - &.info > td { - background-color: @infoBackground; - } -} - -// Hover states for .table-hover -.table-hover tbody tr { - &.success:hover > td { - background-color: darken(@successBackground, 5%); - } - &.error:hover > td { - background-color: darken(@errorBackground, 5%); - } - &.warning:hover > td { - background-color: darken(@warningBackground, 5%); - } - &.info:hover > td { - background-color: darken(@infoBackground, 5%); - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/thumbnails.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/thumbnails.less deleted file mode 100644 index aaacf67..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/thumbnails.less +++ /dev/null @@ -1,53 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Note: `.thumbnails` and `.thumbnails > li` are overridden in responsive files - -// Make wrapper ul behave like the grid -.thumbnails { - margin-left: -@gridGutterWidth; - list-style: none; - .clearfix(); -} -// Fluid rows have no left margin -.row-fluid .thumbnails { - margin-left: 0; -} - -// Float li to make thumbnails appear in a row -.thumbnails > li { - float: left; // Explicitly set the float since we don't require .span* classes - margin-bottom: @baseLineHeight; - margin-left: @gridGutterWidth; -} - -// The actual thumbnail (can be `a` or `div`) -.thumbnail { - display: block; - padding: 4px; - line-height: @baseLineHeight; - border: 1px solid #ddd; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 3px rgba(0,0,0,.055)); - .transition(all .2s ease-in-out); -} -// Add a hover/focus state for linked versions only -a.thumbnail:hover, -a.thumbnail:focus { - border-color: @linkColor; - .box-shadow(0 1px 4px rgba(0,105,214,.25)); -} - -// Images and captions -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: @gray; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tooltip.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tooltip.less deleted file mode 100644 index 83d5f2b..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tooltip.less +++ /dev/null @@ -1,70 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: @zindexTooltip; - display: block; - visibility: visible; - font-size: 11px; - line-height: 1.4; - .opacity(0); - &.in { .opacity(80); } - &.top { margin-top: -3px; padding: 5px 0; } - &.right { margin-left: 3px; padding: 0 5px; } - &.bottom { margin-top: 3px; padding: 5px 0; } - &.left { margin-left: -3px; padding: 0 5px; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: @tooltipColor; - text-align: center; - text-decoration: none; - background-color: @tooltipBackground; - .border-radius(@baseBorderRadius); -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth 0; - border-top-color: @tooltipArrowColor; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0; - border-right-color: @tooltipArrowColor; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth; - border-left-color: @tooltipArrowColor; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: 0 @tooltipArrowWidth @tooltipArrowWidth; - border-bottom-color: @tooltipArrowColor; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/type.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/type.less deleted file mode 100644 index 337138a..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/type.less +++ /dev/null @@ -1,247 +0,0 @@ -// -// Typography -// -------------------------------------------------- - - -// Body text -// ------------------------- - -p { - margin: 0 0 @baseLineHeight / 2; -} -.lead { - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - font-weight: 200; - line-height: @baseLineHeight * 1.5; -} - - -// Emphasis & misc -// ------------------------- - -// Ex: 14px base font * 85% = about 12px -small { font-size: 85%; } - -strong { font-weight: bold; } -em { font-style: italic; } -cite { font-style: normal; } - -// Utility classes -.muted { color: @grayLight; } -a.muted:hover, -a.muted:focus { color: darken(@grayLight, 10%); } - -.text-warning { color: @warningText; } -a.text-warning:hover, -a.text-warning:focus { color: darken(@warningText, 10%); } - -.text-error { color: @errorText; } -a.text-error:hover, -a.text-error:focus { color: darken(@errorText, 10%); } - -.text-info { color: @infoText; } -a.text-info:hover, -a.text-info:focus { color: darken(@infoText, 10%); } - -.text-success { color: @successText; } -a.text-success:hover, -a.text-success:focus { color: darken(@successText, 10%); } - -.text-left { text-align: left; } -.text-right { text-align: right; } -.text-center { text-align: center; } - - -// Headings -// ------------------------- - -h1, h2, h3, h4, h5, h6 { - margin: (@baseLineHeight / 2) 0; - font-family: @headingsFontFamily; - font-weight: @headingsFontWeight; - line-height: @baseLineHeight; - color: @headingsColor; - text-rendering: optimizelegibility; // Fix the character spacing for headings - small { - font-weight: normal; - line-height: 1; - color: @grayLight; - } -} - -h1, -h2, -h3 { line-height: @baseLineHeight * 2; } - -h1 { font-size: @baseFontSize * 2.75; } // ~38px -h2 { font-size: @baseFontSize * 2.25; } // ~32px -h3 { font-size: @baseFontSize * 1.75; } // ~24px -h4 { font-size: @baseFontSize * 1.25; } // ~18px -h5 { font-size: @baseFontSize; } -h6 { font-size: @baseFontSize * 0.85; } // ~12px - -h1 small { font-size: @baseFontSize * 1.75; } // ~24px -h2 small { font-size: @baseFontSize * 1.25; } // ~18px -h3 small { font-size: @baseFontSize; } -h4 small { font-size: @baseFontSize; } - - -// Page header -// ------------------------- - -.page-header { - padding-bottom: (@baseLineHeight / 2) - 1; - margin: @baseLineHeight 0 (@baseLineHeight * 1.5); - border-bottom: 1px solid @grayLighter; -} - - - -// Lists -// -------------------------------------------------- - -// Unordered and Ordered lists -ul, ol { - padding: 0; - margin: 0 0 @baseLineHeight / 2 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: @baseLineHeight; -} - -// Remove default list styles -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -// Single-line list items -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; - > li { - display: inline-block; - .ie7-inline-block(); - padding-left: 5px; - padding-right: 5px; - } -} - -// Description Lists -dl { - margin-bottom: @baseLineHeight; -} -dt, -dd { - line-height: @baseLineHeight; -} -dt { - font-weight: bold; -} -dd { - margin-left: @baseLineHeight / 2; -} -// Horizontal layout (like forms) -.dl-horizontal { - .clearfix(); // Ensure dl clears floats if empty dd elements present - dt { - float: left; - width: @horizontalComponentOffset - 20; - clear: left; - text-align: right; - .text-overflow(); - } - dd { - margin-left: @horizontalComponentOffset; - } -} - -// MISC -// ---- - -// Horizontal rules -hr { - margin: @baseLineHeight 0; - border: 0; - border-top: 1px solid @hrBorder; - border-bottom: 1px solid @white; -} - -// Abbreviations and acronyms -abbr[title], -// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257 -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted @grayLight; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -// Blockquotes -blockquote { - padding: 0 0 0 15px; - margin: 0 0 @baseLineHeight; - border-left: 5px solid @grayLighter; - p { - margin-bottom: 0; - font-size: @baseFontSize * 1.25; - font-weight: 300; - line-height: 1.25; - } - small { - display: block; - line-height: @baseLineHeight; - color: @grayLight; - &:before { - content: '\2014 \00A0'; - } - } - - // Float right with text-align: right - &.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid @grayLighter; - border-left: 0; - p, - small { - text-align: right; - } - small { - &:before { - content: ''; - } - &:after { - content: '\00A0 \2014'; - } - } - } -} - -// Quotes -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -// Addresses -address { - display: block; - margin-bottom: @baseLineHeight; - font-style: normal; - line-height: @baseLineHeight; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/utilities.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/utilities.less deleted file mode 100644 index 314b4ff..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/utilities.less +++ /dev/null @@ -1,30 +0,0 @@ -// -// Utility classes -// -------------------------------------------------- - - -// Quick floats -.pull-right { - float: right; -} -.pull-left { - float: left; -} - -// Toggling content -.hide { - display: none; -} -.show { - display: block; -} - -// Visibility -.invisible { - visibility: hidden; -} - -// For Affix plugin -.affix { - position: fixed; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/variables.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/variables.less deleted file mode 100644 index 31c131b..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/variables.less +++ /dev/null @@ -1,301 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -// Global values -// -------------------------------------------------- - - -// Grays -// ------------------------- -@black: #000; -@grayDarker: #222; -@grayDark: #333; -@gray: #555; -@grayLight: #999; -@grayLighter: #eee; -@white: #fff; - - -// Accent colors -// ------------------------- -@blue: #049cdb; -@blueDark: #0064cd; -@green: #46a546; -@red: #9d261d; -@yellow: #ffc40d; -@orange: #f89406; -@pink: #c3325f; -@purple: #7a43b6; - - -// Scaffolding -// ------------------------- -@bodyBackground: @white; -@textColor: @grayDark; - - -// Links -// ------------------------- -@linkColor: #08c; -@linkColorHover: darken(@linkColor, 15%); - - -// Typography -// ------------------------- -@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; -@serifFontFamily: Georgia, "Times New Roman", Times, serif; -@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; - -@baseFontSize: 14px; -@baseFontFamily: @sansFontFamily; -@baseLineHeight: 20px; -@altFontFamily: @serifFontFamily; - -@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily -@headingsFontWeight: bold; // instead of browser default, bold -@headingsColor: inherit; // empty to use BS default, @textColor - - -// Component sizing -// ------------------------- -// Based on 14px font-size and 20px line-height - -@fontSizeLarge: @baseFontSize * 1.25; // ~18px -@fontSizeSmall: @baseFontSize * 0.85; // ~12px -@fontSizeMini: @baseFontSize * 0.75; // ~11px - -@paddingLarge: 11px 19px; // 44px -@paddingSmall: 2px 10px; // 26px -@paddingMini: 0 6px; // 22px - -@baseBorderRadius: 4px; -@borderRadiusLarge: 6px; -@borderRadiusSmall: 3px; - - -// Tables -// ------------------------- -@tableBackground: transparent; // overall background-color -@tableBackgroundAccent: #f9f9f9; // for striping -@tableBackgroundHover: #f5f5f5; // for hover -@tableBorder: #ddd; // table and cell border - -// Buttons -// ------------------------- -@btnBackground: @white; -@btnBackgroundHighlight: darken(@white, 10%); -@btnBorder: #ccc; - -@btnPrimaryBackground: @linkColor; -@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); - -@btnInfoBackground: #5bc0de; -@btnInfoBackgroundHighlight: #2f96b4; - -@btnSuccessBackground: #62c462; -@btnSuccessBackgroundHighlight: #51a351; - -@btnWarningBackground: lighten(@orange, 15%); -@btnWarningBackgroundHighlight: @orange; - -@btnDangerBackground: #ee5f5b; -@btnDangerBackgroundHighlight: #bd362f; - -@btnInverseBackground: #444; -@btnInverseBackgroundHighlight: @grayDarker; - - -// Forms -// ------------------------- -@inputBackground: @white; -@inputBorder: #ccc; -@inputBorderRadius: @baseBorderRadius; -@inputDisabledBackground: @grayLighter; -@formActionsBackground: #f5f5f5; -@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border - - -// Dropdowns -// ------------------------- -@dropdownBackground: @white; -@dropdownBorder: rgba(0,0,0,.2); -@dropdownDividerTop: #e5e5e5; -@dropdownDividerBottom: @white; - -@dropdownLinkColor: @grayDark; -@dropdownLinkColorHover: @white; -@dropdownLinkColorActive: @white; - -@dropdownLinkBackgroundActive: @linkColor; -@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; - - - -// COMPONENT VARIABLES -// -------------------------------------------------- - - -// Z-index master list -// ------------------------- -// Used for a bird's eye view of components dependent on the z-axis -// Try to avoid customizing these :) -@zindexDropdown: 1000; -@zindexPopover: 1010; -@zindexTooltip: 1030; -@zindexFixedNavbar: 1030; -@zindexModalBackdrop: 1040; -@zindexModal: 1050; - - -// Sprite icons path -// ------------------------- -@iconSpritePath: "../img/glyphicons-halflings.png"; -@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; - - -// Input placeholder text color -// ------------------------- -@placeholderText: @grayLight; - - -// Hr border color -// ------------------------- -@hrBorder: @grayLighter; - - -// Horizontal forms & lists -// ------------------------- -@horizontalComponentOffset: 180px; - - -// Wells -// ------------------------- -@wellBackground: #f5f5f5; - - -// Navbar -// ------------------------- -@navbarCollapseWidth: 979px; -@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; - -@navbarHeight: 40px; -@navbarBackgroundHighlight: #ffffff; -@navbarBackground: darken(@navbarBackgroundHighlight, 5%); -@navbarBorder: darken(@navbarBackground, 12%); - -@navbarText: #777; -@navbarLinkColor: #777; -@navbarLinkColorHover: @grayDark; -@navbarLinkColorActive: @gray; -@navbarLinkBackgroundHover: transparent; -@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); - -@navbarBrandColor: @navbarLinkColor; - -// Inverted navbar -@navbarInverseBackground: #111111; -@navbarInverseBackgroundHighlight: #222222; -@navbarInverseBorder: #252525; - -@navbarInverseText: @grayLight; -@navbarInverseLinkColor: @grayLight; -@navbarInverseLinkColorHover: @white; -@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; -@navbarInverseLinkBackgroundHover: transparent; -@navbarInverseLinkBackgroundActive: @navbarInverseBackground; - -@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); -@navbarInverseSearchBackgroundFocus: @white; -@navbarInverseSearchBorder: @navbarInverseBackground; -@navbarInverseSearchPlaceholderColor: #ccc; - -@navbarInverseBrandColor: @navbarInverseLinkColor; - - -// Pagination -// ------------------------- -@paginationBackground: #fff; -@paginationBorder: #ddd; -@paginationActiveBackground: #f5f5f5; - - -// Hero unit -// ------------------------- -@heroUnitBackground: @grayLighter; -@heroUnitHeadingColor: inherit; -@heroUnitLeadColor: inherit; - - -// Form states and alerts -// ------------------------- -@warningText: #c09853; -@warningBackground: #fcf8e3; -@warningBorder: darken(spin(@warningBackground, -10), 3%); - -@errorText: #b94a48; -@errorBackground: #f2dede; -@errorBorder: darken(spin(@errorBackground, -10), 3%); - -@successText: #468847; -@successBackground: #dff0d8; -@successBorder: darken(spin(@successBackground, -10), 5%); - -@infoText: #3a87ad; -@infoBackground: #d9edf7; -@infoBorder: darken(spin(@infoBackground, -10), 7%); - - -// Tooltips and popovers -// ------------------------- -@tooltipColor: #fff; -@tooltipBackground: #000; -@tooltipArrowWidth: 5px; -@tooltipArrowColor: @tooltipBackground; - -@popoverBackground: #fff; -@popoverArrowWidth: 10px; -@popoverArrowColor: #fff; -@popoverTitleBackground: darken(@popoverBackground, 3%); - -// Special enhancement for popovers -@popoverArrowOuterWidth: @popoverArrowWidth + 1; -@popoverArrowOuterColor: rgba(0,0,0,.25); - - - -// GRID -// -------------------------------------------------- - - -// Default 940px grid -// ------------------------- -@gridColumns: 12; -@gridColumnWidth: 60px; -@gridGutterWidth: 20px; -@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); - -// 1200px min -@gridColumnWidth1200: 70px; -@gridGutterWidth1200: 30px; -@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); - -// 768px-979px -@gridColumnWidth768: 42px; -@gridGutterWidth768: 20px; -@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); - - -// Fluid grid -// ------------------------- -@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); -@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); - -// 1200px min -@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); -@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); - -// 768px-979px -@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); -@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/wells.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/wells.less deleted file mode 100644 index 84a744b..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/wells.less +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: @wellBackground; - border: 1px solid darken(@wellBackground, 7%); - .border-radius(@baseBorderRadius); - .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-large { - padding: 24px; - .border-radius(@borderRadiusLarge); -} -.well-small { - padding: 9px; - .border-radius(@borderRadiusSmall); -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-bootstrap.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-bootstrap.less deleted file mode 100644 index 146f05d..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-bootstrap.less +++ /dev/null @@ -1,18 +0,0 @@ -// spc bootstrap settings -@import "bootstrap/bootstrap.less"; -@import "bootstrap/responsive.less"; - -// google webfont -@import url(https://fonts.googleapis.com/css?family=Open+Sans); - -//Typography -@sansFontFamily: 'Open Sans', sans-serif !important; -@baseFontSize: 13px; -@baseLineHeight: 19px; - -//Colors -@blue: #12567D; - -//Sprites -@iconSpritePath: '../../img/glyphicons-halflings.png'; -@iconWhiteSpritePath: '../../img/glyphicons-halflings-white.png'; diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-content.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-content.less deleted file mode 100644 index cc1cebd..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-content.less +++ /dev/null @@ -1,57 +0,0 @@ -@import "spc-utils.less"; -@import "bootstrap/variables.less"; - -.spc-page-title { - h1, h2, h3, h4 { - font-weight: normal; - .underline; - } -} - -//tags -- deprecated -// need to design -.tags .btn { - border: none; - font-size: 9.5px; - font-weight: bold; -} - -// search item specific settings -.spc-search-result { - &-title { - h1, h2, h3, h4 { font-weight: normal; } - } -} - -// snippet specific settings -.spc-snippet-header { - margin-bottom: 5px; -} - -.spc-snippet-info { - padding-top: 10px; - - .dl-horizontal { - margin: 5px; - dt { font-weight: normal; } - } -} - -.spc-snippet-body { - padding: 10px; - - .accordion-group { - border: none; - } - - .accordion-heading { - text-transform: uppercase; - font-size: 14px; - border-bottom: 1px solid #e5e5e5; - } - - .accordion-heading .accordion-toggle { - padding-top: 10px; - padding-bottom: 5px; - } -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-extend.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-extend.less deleted file mode 100644 index 9e0cd6c..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-extend.less +++ /dev/null @@ -1,22 +0,0 @@ -//spc extend settings - -body { - background-color: rgb(249,250,245); -} - -.container { - width: 80%; -} - -.main { - background-color: white; - padding: 18px; - -moz-box-shadow: 0 0 3px #888; - -webkit-box-shadow: 0 0 3px #888; - box-shadow: 0 0 3px #888; -} - -@import "spc-header.less"; -@import "spc-content.less"; -@import "spc-rightsidebar.less"; -@import "spc-footer.less"; \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-footer.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-footer.less deleted file mode 100644 index 8e4d09b..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-footer.less +++ /dev/null @@ -1,9 +0,0 @@ -@import "bootstrap/variables.less"; - -//footer-outside -.footer { - padding: 5px; - font-size: small; -} - -//footer inside yet to be done (may be not required). \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-header.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-header.less deleted file mode 100644 index 0d77cd2..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-header.less +++ /dev/null @@ -1,25 +0,0 @@ -// settings for -// 1) .header -// header block is found on the top of the website -// spc-navbar, spc-header-searchbar found inside .header -// 2) .spc-navbar -// 3) .spc-header-searchbar - -@import "spc-utils.less"; - -.header { - .margin(@top: 15px, @bottom: 15px); -} - -.spc-navbar { - .margin (@top: 15px, @bottom: 5px); - .nav-pills { - margin-bottom: 0px; - font-size: 12px; - - >li >a { - padding-top: 2.5px; - padding-bottom: 2.5px; - } - } -} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-rightsidebar.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-rightsidebar.less deleted file mode 100644 index afef531..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-rightsidebar.less +++ /dev/null @@ -1,14 +0,0 @@ -@import "bootstrap/variables.less"; - -.spc-rightsidebar { - color: @gray; - .navigation { - padding: @paddingSmall; - font-size: @fontSizeSmall; - } - .navigation .nav-title { - font-weight: bold; - text-transform: uppercase; - } - .navigation li { margin: 5px; } -} \ No newline at end of file diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-utils.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-utils.less deleted file mode 100644 index 2ac9908..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-utils.less +++ /dev/null @@ -1,20 +0,0 @@ -// LESS Utilities for spc -@import "bootstrap/variables.less"; - -.padding (@top: 0px, @bottom: 0px, @left: 0px, @right: 0px) { - padding-top: @top; - padding-bottom: @bottom; - padding-left: @left; - padding-right: @right; -} - -.margin (@top: 0px, @bottom: 0px, @left: 0px, @right: 0px) { - margin-top: @top; - margin-bottom: @bottom; - margin-left: @left; - margin-right:@right; -} - -.underline { - border-bottom: 1.5px solid @hrBorder; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/scipy.css_t b/kima/vendor/spleaf/doc/source/_theme/scipy/static/scipy.css_t deleted file mode 100644 index 7100293..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/scipy.css_t +++ /dev/null @@ -1,290 +0,0 @@ -/* -*- css -*- - * - * sphinxdoc.css_t - * ~~~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- sphinxdoc theme. Originally created by - * Armin Ronacher for Werkzeug. - * - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -@import url("css/scipy-central.css"); - - -/* - * General tweaks - */ - -div.container-navbar-bottom { - margin-top: 0; -} - -div.container-navbar-bottom div.spc-navbar { - margin-top: 0; -} - -div.spc-navbar { - margin: 0; -} - -tt { - color: inherit; - font: inherit; -} - -tt.literal { - font-family: monospace; - padding-left: 2px; - background-color: rgb(242, 242, 242); -} - -a tt.literal { - border: none; - background-color: inherit; -} - -tt.xref { - font-family: inherit; - border: none; - background-color: inherit; - font-weight: normal; - padding-left: 0px; -} - -tt.descname { - font-size: 16px; -} - -code { - color: inherit; - font: inherit; - padding: inherit; - border: inherit; -} - -code.literal { - font-family: monospace; - padding-left: 2px; - background-color: rgb(242, 242, 242); -} - -a code.literal { - border: none; - background-color: inherit; -} - -code.xref { - font-family: inherit; - border-bottom: none; - background-color: inherit; - padding-left: 0px; -} - -code.descname { - font-size: 16px; -} - -dl.class > dt > em { - font-weight: normal; -} - -dl.function > dt > em { - font-weight: normal; -} - -dl.method > dt > em { - font-weight: normal; -} - -pre { - border-radius: 0; - border: none; - font-family: monospace; -} - - -/* - * Field lists - */ - -table.field-list { - border-collapse: collapse; - border-spacing: 5px; - margin-left: 1px; - border-left: 5px solid rgb(238, 238, 238) !important; -} - -table.field-list th.field-name { - display: inline-block; - padding: 1px 8px 1px 5px; - white-space: nowrap; - background-color: rgb(238, 238, 238); -} - -table.field-list td.field-body { - border-left: none !important; -} - -table.field-list td.field-body > p { - font-style: italic; -} - -table.field-list td.field-body > p > strong { - font-style: normal; -} - -td.field-body blockquote { - border-left: none; - margin: 0; - padding-left: 30px; -} - -td.field-body blockquote p, -dl.class blockquote p, -dl.function blockquote p, -dl.method blockquote p -{ - font-family: inherit; - font-size: inherit; - font-weight: inherit; - line-height: inherit; -} - - -/* - * Sidebars and top logo - */ - -div.sphinxsidebarwrapper { - overflow: hidden; -} - -div.spc-rightsidebar h3 { - font-size: 120%; - line-height: inherit; - border-bottom: none; -} - -div.spc-rightsidebar h4 { - font-size: 120%; - line-height: inherit; - border-bottom: none; -} - -div.top-scipy-org-logo-header { - text-align: left; - background-color: rgb(140, 170, 230); - border-bottom: 8px solid rgb(0, 51, 153); - margin-top: 10px; - padding: 5px; - box-shadow: 0px 0px 3px rgb(136, 136, 136); -} - - -/* - * Headers - */ - -h1 a { color: rgb(85, 85, 85); } -h2 a { color: rgb(85, 85, 85); } -h3 a { color: rgb(85, 85, 85); } -h4 a { color: rgb(85, 85, 85); } -h5 a { color: rgb(85, 85, 85); } -h6 a { color: rgb(85, 85, 85); } - -h1 tt { font: inherit; border-bottom: none; } -h2 tt { font: inherit; border-bottom: none; } -h3 tt { font: inherit; border-bottom: none; } -h4 tt { font: inherit; border-bottom: none; } -h5 tt { font: inherit; border-bottom: none; } -h6 tt { font: inherit; border-bottom: none; } - -h1 code { font: inherit; border: none; background-color: inherit; padding: inherit; } -h2 code { font: inherit; border: none; background-color: inherit; padding: inherit; } -h3 code { font: inherit; border: none; background-color: inherit; padding: inherit; } -h4 code { font: inherit; border: none; background-color: inherit; padding: inherit; } -h5 code { font: inherit; border: none; background-color: inherit; padding: inherit; } -h6 code { font: inherit; border: none; background-color: inherit; padding: inherit; } - -div#spc-section-body h1 { color: rgb(85, 85, 85); } -div#spc-section-body h2 { color: rgb(85, 85, 85); } -div#spc-section-body h3 { color: rgb(85, 85, 85); } -div#spc-section-body h4 { color: rgb(85, 85, 85); border-bottom: none; } -div#spc-section-body h5 { color: rgb(85, 85, 85); border-bottom: none; } -div#spc-section-body h6 { color: rgb(85, 85, 85); border-bottom: none; } - -p.rubric { - color: rgb(85, 85, 85); - font-size: 120%; - font-weight: normal; - border-bottom: 1px solid rgb(204, 204, 204); -} - - -/* - * Tables - */ - -table.citation { - border: none; -} - -table.docutils td, table.docutils th { - border: none; - /* align column names (left col) to first line of - multi-line descriptions (right col) */ - vertical-align: top; -} - -table.docutils { - margin-bottom: 9.5px; -} - -table.align-default { /* left align tables like in old Sphinx */ - margin-left: 0; - margin-right: auto; -} - -/* - * Admonitions - */ - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.seealso dt { - float: left; - clear: left; - min-width: 4em; - padding-right: 1em; -} - -div.seealso dd { - margin-top: 0; - margin-bottom: 0; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/theme.conf b/kima/vendor/spleaf/doc/source/_theme/scipy/theme.conf deleted file mode 100644 index 7cfff6c..0000000 --- a/kima/vendor/spleaf/doc/source/_theme/scipy/theme.conf +++ /dev/null @@ -1,11 +0,0 @@ -[theme] -inherit = basic -stylesheet = scipy.css -pygments_style = friendly - -[options] -edit_link = false -rootlinks = [] -sidebar = left -scipy_org_logo = -navigation_links = true diff --git a/kima/vendor/spleaf/doc/source/calib.rst b/kima/vendor/spleaf/doc/source/calib.rst deleted file mode 100644 index e0473fb..0000000 --- a/kima/vendor/spleaf/doc/source/calib.rst +++ /dev/null @@ -1,155 +0,0 @@ -Modeling a Gaussian Process together with calibration noise -=========================================================== - -We consider a time series showing quasiperiodic oscillations -and affected by white noise as well as calibration noise. - -The calibration noise is introduced -by the fact that the instrument is calibrated periodically (e.g. once a day) with some error. -Measurements using the same calibration share the same calibration error. - -The aim is to use a gaussian process to fit the quasiperiodic oscillations -and be able to predict missing observations. - -We first generate the simulated time series: - -.. plot:: - :context: close-figs - - import numpy as np - import matplotlib.pyplot as plt - np.random.seed(0) - - # Generate calendar - nt = 100 - tmax = 20 - t = np.sort(np.concatenate(( - np.random.uniform(0, tmax/3, nt//2), - np.random.uniform(2*tmax/3, tmax, (nt+1)//2)))) - - # Quasiperiodic signal - amp = 3.0 - P0 = 5.2 - dP = 0.75 - P = P0 + dP*(t/tmax-1/2) - y = amp*np.sin(2*np.pi*t/P) - - # Truth - tsmooth = np.linspace(0, tmax, 2000) - Psmooth = P0 + dP*(tsmooth/tmax-1/2) - ysignal = amp*np.sin(2*np.pi*tsmooth/Psmooth) - dysignal = amp*2*np.pi/Psmooth*(1-tsmooth*dP/(tmax*Psmooth))*np.cos(2*np.pi*tsmooth/Psmooth) - - # Measurement errors (white noise) - yerr_meas = np.random.uniform(0.5, 1.5, nt) - y = y + np.random.normal(0, yerr_meas) - - # Calibration errors (correlated noise) - calib_id = (t//1).astype(int) # One calibration per day - caliberr = np.random.uniform(0.5, 1.5, calib_id[-1]+1) - yerr_calib = caliberr[calib_id] - y += np.random.normal(0, caliberr)[calib_id] - - # Total errorbar - yerr = np.sqrt(yerr_meas**2 + yerr_calib**2) - - # Plot - plt.figure() - plt.plot(tsmooth, ysignal, 'r', label='truth') - plt.errorbar(t, y, yerr, fmt='.', color='k', label='meas.') - plt.xlabel('t') - plt.ylabel('y') - plt.legend() - -We now fit the data using S+LEAF. -As a first approach, we ignore the correlation induced by the calibration noise, -and treat it as if it was white noise: - -.. plot:: - :context: close-figs - - from spleaf.cov import Cov - from spleaf.term import * - from scipy.optimize import fmin_l_bfgs_b - - # Initialize the S+LEAF model - cov = Cov(t, - err = Error(yerr), - sho = SHOKernel(0.5, 5.0, 1.0)) - - # We now fit the hyperparameters using the fmin_l_bfgs_b function from scipy.optimize. - # Define the function to minimize - def negloglike(x, y, cov): - cov.set_param(x) - nll = -cov.loglike(y) - # gradient - nll_grad = -cov.loglike_grad()[1] - return(nll, nll_grad) - - # Fit - xbest,_,_ = fmin_l_bfgs_b(negloglike, cov.get_param(), args=(y, cov)) - - # We now use S+LEAF to predict the missing data - cov.set_param(xbest) - mu, var = cov.conditional(y, tsmooth, calc_cov='diag') - - # Plot - plt.figure() - plt.plot(tsmooth, ysignal, 'r', label='truth') - plt.errorbar(t, y, yerr, fmt='.', color='k', label='meas.') - plt.fill_between(tsmooth, mu-np.sqrt(var), mu+np.sqrt(var), color='g', alpha=0.5) - plt.plot(tsmooth, mu, 'g', label='predict.') - plt.xlabel('t') - plt.ylabel('y') - plt.legend() - -We see that the gaussian process is not completely wrong but tend -to absorb the correlated noise due to the calibration. -The prediction in the gap is not very satisfying. - -Let us now correctly model the calibration noise with S+LEAF: - -.. plot:: - :context: close-figs - - # We define a new covariance matrix including calibration error - cov = Cov(t, - err = Error(yerr_meas), - calerr = CalibrationError(calib_id, yerr_calib), - sho = SHOKernel(0.5, 5.0, 1.0)) - - # Fit - xbest,_,_ = fmin_l_bfgs_b(negloglike, cov.get_param(), args=(y, cov)) - - # Predict - cov.set_param(xbest) - mu, var = cov.conditional(y, tsmooth, calc_cov='diag') - - # Plot - plt.figure() - plt.plot(tsmooth, ysignal, 'r', label='truth') - plt.errorbar(t, y, yerr, fmt='.', color='k', label='meas.') - plt.fill_between(tsmooth, mu-np.sqrt(var), mu+np.sqrt(var), color='g', alpha=0.5) - plt.plot(tsmooth, mu, 'g', label='predict.') - plt.xlabel('t') - plt.ylabel('y') - plt.legend() - -The results are indeed much better! - -S+LEAF also allows to predict the derivative of the gaussian process: - -.. plot:: - :context: close-figs - - # Predict derivative - dmu, dvar = cov.conditional_derivative(y, tsmooth, calc_cov='diag') - - # Plot - plt.figure() - plt.plot(tsmooth, dysignal, 'r', label='truth') - plt.fill_between(tsmooth, dmu-np.sqrt(dvar), dmu+np.sqrt(dvar), color='g', alpha=0.5) - plt.plot(tsmooth, dmu, 'g', label='predict.') - plt.xlabel('t') - plt.ylabel('dy/dt') - plt.legend() diff --git a/kima/vendor/spleaf/doc/source/conf.py b/kima/vendor/spleaf/doc/source/conf.py deleted file mode 100644 index d335136..0000000 --- a/kima/vendor/spleaf/doc/source/conf.py +++ /dev/null @@ -1,30 +0,0 @@ -import os -import sys -import spleaf - -# -- Project information ----------------------------------------------------- -project = 'S+LEAF' -copyright = '2019-2022, Jean-Baptiste Delisle' -author = 'Jean-Baptiste Delisle' - -# -- General configuration --------------------------------------------------- -needs_sphinx = '1.1' -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autosummary', - 'sphinx.ext.intersphinx', 'sphinx.ext.coverage', - 'numpydoc', 'matplotlib.sphinxext.plot_directive'] -templates_path = ['_templates'] -exclude_patterns = [] -pygments_style = 'sphinx' -autosummary_generate = True -plot_include_source = True - -# -- Options for HTML output ------------------------------------------------- -html_theme_path = ['_theme'] -html_theme = 'scipy' -html_theme_options = { - "rootlinks": [], - 'sidebar': 'right', - "edit_link": False, -} -html_sidebars = {'index': ['searchbox.html']} -html_static_path = ['_static'] diff --git a/kima/vendor/spleaf/doc/source/index.rst b/kima/vendor/spleaf/doc/source/index.rst deleted file mode 100644 index 3ceb728..0000000 --- a/kima/vendor/spleaf/doc/source/index.rst +++ /dev/null @@ -1,91 +0,0 @@ - -S+LEAF documentation -==================== - -S+LEAF is an `open-source `_ -software that provides a flexible noise model with fast and scalable methods. -It is largely inspired by the -`celerite `_ / `celerite2 `_ -model proposed by [1]_, [3]_. -In particular the modeling of gaussian processes is similar, -and uses the same semiseparable matrices representation as celerite. -S+LEAF extends the celerite model in two ways: - -- It allows to account - for close to diagonal (LEAF) noises such as instrument calibration errors - (see [2]_ for more details). -- It allows to model simulatenously several time series - with the same Gaussian processes and their derivatives - (see [4]_ for more details). - -Please cite [2]_ and [4]_ if you use S+LEAF in a publication. - -Installation ------------- - -Using conda -~~~~~~~~~~~ - -The S+LEAF package can be installed using conda with the following command: - -``conda install -c conda-forge spleaf`` - -Using pip -~~~~~~~~~ - -It can also be installed using pip with: - -``pip install spleaf`` - -Usage ------ - -S+LEAF covariance matrices are generated using the -:doc:`_autosummary/spleaf.cov.Cov` class. -The covariance matrix is modeled as the sum of different components (or terms), -which split into two categories: -noise terms and kernel terms (gaussian processes). -See the :ref:`API reference` for a list of available terms. - -The low level implementation of -S+LEAF matrices as defined by [2]_ -is available as the :doc:`_autosummary/spleaf.Spleaf` class, -but one typically does not need to directly deal with it. - -Examples --------- - -.. toctree:: - calib - multi - -.. _api_ref: - -API Reference -------------- - -.. autosummary:: - :toctree: _autosummary - :template: autosummary/custom_module.rst - :recursive: - - spleaf.cov - spleaf.term - spleaf - -Contribute ----------- - -Everyone is welcome to open issues and/or contribute code via pull-requests. -A SWITCH edu-ID account is necessary to sign in to ``_. -If you don't have an account, you can easily create one at ``_. -Then you can sign in to ``_ by selecting "SWITCH edu-ID" as your organisation. - - -References ----------- - -.. [1] `Foreman-Mackey et al., "Fast and Scalable Gaussian Process Modeling with Applications to Astronomical Time Series", 2017 `_. -.. [2] `Delisle, J.-B., Hara, N., and Ségransan, D., "Efficient modeling of correlated noise. II. A flexible noise model with fast and scalable methods", 2020 `_. -.. [3] `Gordon, T. A., Agol, E., Foreman-Mackey, D., "A Fast, Two-dimensional Gaussian Process Method Based on Celerite: Applications to Transiting Exoplanet Discovery and Characterization", 2020 `_. -.. [4] `Delisle, J.-B., Unger, N., Hara, N., and Ségransan, D., "Efficient modeling of correlated noise. III. Scalable methods for jointly modeling several observables' time series with Gaussian processes", 2022 `_. diff --git a/kima/vendor/spleaf/doc/source/multi.rst b/kima/vendor/spleaf/doc/source/multi.rst deleted file mode 100644 index c94c390..0000000 --- a/kima/vendor/spleaf/doc/source/multi.rst +++ /dev/null @@ -1,124 +0,0 @@ -Modeling a Gaussian Process over heterogeneous time series -========================================================== - -We consider here a physical process, such as stellar activity modulated by stellar rotation, -affecting several observables (3 here) differently (different amplitudes, lags, etc.). -We will model this physical process through a Gaussian process and its derivative. -In this model, each observable is a linear combination of the GP (:math:`G(t)`) and its derivative (:math:`G'(t)`): - -.. math:: y_{i}(t) = \alpha_i G(t) + \beta_i G'(t). - - -We first generate the 3 time series with a quasiperiodic evolution and different lags: - -.. plot:: - :context: close-figs - - import numpy as np - import matplotlib.pyplot as plt - - np.random.seed(0) - - # Settings - P0 = 3.8 - dP = 1.25 - tmax = 20 - amp = [3.0, 1.0, 0.33] - phase = [0, np.pi / 2, -3*np.pi / 4] - nt = [75, 100, 50] - - # True signal - tsmooth = np.linspace(0, tmax, 2000) - Psmooth = P0 + dP * (tsmooth / tmax - 1 / 2) - Ysignal = [ - ak * np.sin(2 * np.pi * tsmooth / Psmooth + pk) - for ak, pk in zip(amp, phase) - ] - - # Generate observations calendars - T = [ - np.sort( - np.concatenate((np.random.uniform(0, tmax / 3, - ntk // 2), np.random.uniform(2 * tmax / 3, tmax, (ntk + 1) // 2)))) - for ntk in nt - ] - - # Generate measurements with white noise - Yerr = [np.random.uniform(0.5, 1.5, ntk) for ntk in nt] - P = [P0 + dP * (tk / tmax - 1 / 2) for tk in T] - Y = [ - amp[k] * np.sin(2 * np.pi * T[k] / P[k] + phase[k]) + - np.random.normal(0, Yerr[k]) for k in range(3) - ] - - # Plot - _, axs = plt.subplots(3, 1, sharex=True, figsize=(6, 10)) - for k in range(3): - ax = axs[k] - ax.plot(tsmooth, Ysignal[k], 'r', label='truth') - ax.errorbar(T[k], Y[k], Yerr[k], fmt='.', color='k', label='meas.') - ax.set_ylabel(f'$y_{k}$') - ax.set_xlabel('$t$') - axs[0].legend() - - -We now fit these data using S+LEAF: - -.. plot:: - :context: close-figs - - from spleaf import cov, term - from scipy.optimize import fmin_l_bfgs_b - - # Merge all 3 time series - t_full, y_full, yerr_full, series_index = cov.merge_series(T, Y, Yerr) - - # Initialize the S+LEAF model - C = cov.Cov(t_full, - err=term.Error(yerr_full), - GP=term.MultiSeriesKernel(term.SHOKernel(1.0, 5.0, 1.0), series_index, - np.ones(3), np.ones(3))) - - # Fit the hyperparameters using the fmin_l_bfgs_b function from scipy.optimize. - # List of parameters to fit - param = C.param[1:] - # The amplitude of the SHOKernel is fixed at 1 (not fitted), - # since it would be degenerated with the amplitudes alpha, \beta. - - # Define the function to minimize - def negloglike(x, y, C): - C.set_param(x, param) - nll = -C.loglike(y) - # gradient - nll_grad = -C.loglike_grad()[1][1:] - return (nll, nll_grad) - - # Fit - xbest, _, _ = fmin_l_bfgs_b(negloglike, C.get_param(param), args=(y_full, C)) - - # Use S+LEAF to predict the missing data - C.set_param(xbest, param) - _, axs = plt.subplots(3, 1, sharex=True, figsize=(6, 10)) - for k in range(3): - # Predict time series k - C.kernel['GP'].set_conditional_coef(series_id=k) - mu, var = C.conditional(y_full, tsmooth, calc_cov='diag') - - # Plot - ax = axs[k] - ax.plot(tsmooth, Ysignal[k], 'r', label='truth') - ax.errorbar(T[k], Y[k], Yerr[k], fmt='.', color='k', label='meas.') - ax.fill_between(tsmooth, - mu - np.sqrt(var), - mu + np.sqrt(var), - color='g', - alpha=0.5) - ax.plot(tsmooth, mu, 'g', label='predict.') - ax.set_ylabel(f'$y_{k}$') - ax.set_xlabel('$t$') - axs[0].legend() - plt.show() - -Thanks to the informations contained in the two first time series :math:`y_0` and :math:`y_1`, -we obtain a good prediction for the third time series :math:`y_2`, -even if the signal to noise ratio is low. \ No newline at end of file diff --git a/kima/vendor/spleaf/setup.py b/kima/vendor/spleaf/setup.py deleted file mode 100644 index 472effc..0000000 --- a/kima/vendor/spleaf/setup.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2019-2022 Jean-Baptiste Delisle -# -# This file is part of spleaf. -# -# spleaf is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# spleaf is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with spleaf. If not, see . - -from setuptools import setup, Extension -import numpy.distutils.misc_util -import os - -path = os.path.abspath(os.path.dirname(__file__)) - -info = {} -with open(os.path.join(path, 'spleaf', '__info__.py'), 'r') as f: - exec(f.read(), info) -with open('README.rst', 'r', encoding='utf-8') as readme: - long_description = readme.read() - -c_ext = Extension('spleaf.libspleaf', - sources=['spleaf/pywrapspleaf.c', 'spleaf/libspleaf.c'], - language='c') - -setup(name=info['__title__'], - version=info['__version__'], - author=info['__author__'], - author_email=info['__author_email__'], - license=info['__license__'], - description=info['__description__'], - long_description=long_description, - url=info['__url__'], - packages=['spleaf'], - ext_modules=[c_ext], - include_dirs=numpy.distutils.misc_util.get_numpy_include_dirs(), - python_requires='>=3.6', - install_requires='numpy>=1.16') diff --git a/kima/vendor/spleaf/spleaf/__info__.py b/kima/vendor/spleaf/spleaf/__info__.py deleted file mode 100644 index 2532728..0000000 --- a/kima/vendor/spleaf/spleaf/__info__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2019-2022 Jean-Baptiste Delisle -# -# This file is part of spleaf. -# -# spleaf is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# spleaf is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with spleaf. If not, see . - -__title__ = 'spleaf' -__description__ = 'Symmetric S+LEAF matrix.' -__author__ = 'Jean-Baptiste Delisle' -__author_email__ = 'jean-baptiste.delisle@unige.ch' -__license__ = 'GPLv3' -__url__ = 'https://gitlab.unige.ch/jean-baptiste.delisle/spleaf' -__version__ = "2.1.2" diff --git a/kima/vendor/spleaf/spleaf/__init__.py b/kima/vendor/spleaf/spleaf/__init__.py deleted file mode 100644 index f12f543..0000000 --- a/kima/vendor/spleaf/spleaf/__init__.py +++ /dev/null @@ -1,996 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2019-2022 Jean-Baptiste Delisle -# -# This file is part of spleaf. -# -# spleaf is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# spleaf is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with spleaf. If not, see . - -__all__ = ['Spleaf'] - -import numpy as np -from . import libspleaf -from .__info__ import __version__ - - -class Spleaf(): - r""" - Symmetric S+LEAF (semiseparable + leaf) matrix. - - A symmetric S+LEAF matrix :math:`C` is defined as - - .. math:: C = A + \mathrm{tril}(U V^T) + \mathrm{triu}(V U^T) + F, - - where - :math:`A` is the diagonal part, - the matrices :math:`U` and :math:`V` represent - the symmetric semiseparable part, - and :math:`F` is the symmetric leaf part of :math:`C`. - - A Cholesky decomposition of :math:`C` is performed - - .. math:: C = L D L^T, - - where - :math:`D` is a diagonal matrix - and :math:`L` is a lower triangular matrix which itself decomposes as - - .. math:: L = \mathbb{I} + \mathrm{tril}(U W^T) + G, - - with - :math:`U` and :math:`W` representing the - strictly lower triangular semiseparable part, - and :math:`G` the strictly lower triangular leaf part of :math:`L`. - - Parameters - ---------- - A : (n,) ndarray - Diagonal of the matrix. - U, V : (n, r) ndarrays - Symmetric semiseparable part of the matrix, - with preconditioning matrix `phi`. - At row i, column j < i, - the semiseparable part is - ``np.sum(U[i] * V[j] * np.prod(phi[j:i-1], axis=0))`` - phi : (n-1, r) ndarray - Preconditioning matrix for the semiseparable part. - offsetrow : (n,) ndarray - Offsets for the storage of each row in `F` (leaf part). - b : (n,) ndarray - Number of non-zero values left to the diagonal at each row of `F`. - F : ndarray - Symmetric leaf part of the matrix, - stored in strictly lower triangular form, - and in row major order. - For ``i-b[i] <= j < i``, the non-zero value - :math:`F_{i,j}` is stored at index ``offsetrow[i] + j`` in `F`. - (i.e. offsetrow should be defined as ``offsetrow = np.cumsum(b-1) + 1``). - copy : bool - Whether to copy arrays. - - Attributes - ---------- - n : int - Size of the matrix. - r : int - Rank of the semiseparable part (number of components). - A, U, V, phi, offsetrow, b, F : ndarrays - See parameters. - D : (n,) ndarray - Diagonal part of the Cholesky decomposition of the matrix. - W : (n,r) ndarray - Semiseparable part of the Cholesky decomposition of the matrix. - G : ndarray - Leaf part of the Cholesky decomposition of the matrix - (stored in the same way as `F`). - """ - - def __init__(self, A, U, V, phi, offsetrow, b, F, copy=False): - self.A = self._copy(A, copy) - self.U = self._copy(U, copy) - self.V = self._copy(V, copy) - self.phi = self._copy(phi, copy) - self.offsetrow = self._copy(offsetrow, copy) - self.b = self._copy(b, copy) - self.F = self._copy(F, copy) - - self.n = A.size - self.r = U.shape[1] - - # Cholesky decomposition - self.D = np.empty_like(A) - self.W = np.empty_like(V) - self.G = np.empty_like(F) - self._S = np.empty(self.n * self.r * self.r) - self._Z = np.empty((self.F.size + self.n) * self.r) - - libspleaf.spleaf_cholesky(self.n, self.r, self.offsetrow, self.b, self.A, - self.U, self.V, self.phi, self.F, self.D, self.W, self.G, self._S, - self._Z) - - # Back propagation (no init) - self._grad_A = None - self._grad_U = None - self._grad_V = None - self._grad_phi = None - self._grad_F = None - - self._grad_D = None - self._grad_Ucho = None - self._grad_W = None - self._grad_phicho = None - self._grad_G = None - - # Kernel derivative - self._dU = None - self._dV = None - - # Other - self._logdet_value = None - self._sqD_value = None - self._x_dotL = None - self._f_dotL = np.empty(self.n * self.r) - self._x_solveL = None - self._f_solveL = np.empty(self.n * self.r) - self._x_dotLT = None - self._g_dotLT = np.empty(self.n * self.r) - self._x_solveLT = None - self._g_solveLT = np.empty(self.n * self.r) - - def _copy(self, x, copy): - r""" - Perform a copy if required else pass the object. - """ - if copy and isinstance(x, np.ndarray): - return (x.copy()) - else: - return (x) - - def set_param(self, A, U, V, phi, F, copy=False): - r""" - Update the initial parameters (`A`, `U`, `V`, `phi`, `F`) - and recompute the Cholesky decomposition of the matrix. - """ - - self.A = self._copy(A, copy) - self.U = self._copy(U, copy) - self.V = self._copy(V, copy) - self.phi = self._copy(phi, copy) - self.F = self._copy(F, copy) - - # Cholesky decomposition - libspleaf.spleaf_cholesky(self.n, self.r, self.offsetrow, self.b, self.A, - self.U, self.V, self.phi, self.F, self.D, self.W, self.G, self._S, - self._Z) - - # Re-init logdet/sqD - self._logdet_value = None - self._sqD_value = None - - def expand(self): - r""" - Expand the matrix as a full (n x n) matrix. - - Warnings - -------- - This non-sparse representation has a - :math:`\mathcal{O}(n^2)` cost and footprint. - """ - - C = np.diag(self.A) - for i in range(self.n): - for j in range(i - self.b[i], i): - C[i, j] = self.F[self.offsetrow[i] + j] - cumphi = np.ones(self.r) - for j in range(i - 1, -1, -1): - cumphi *= self.phi[j] - C[i, j] += np.sum(cumphi * self.U[i] * self.V[j]) - C[j, i] = C[i, j] - return (C) - - def expandL(self): - r""" - Expand :math:`L` as a full (n x n) matrix. - - Warnings - -------- - This non-sparse representation has a - :math:`\mathcal{O}(n^2)` cost and footprint. - """ - - L = np.identity(self.n) - for i in range(self.n): - for j in range(i - self.b[i], i): - L[i, j] = self.G[self.offsetrow[i] + j] - cumphi = np.ones(self.r) - for j in range(i - 1, -1, -1): - cumphi *= self.phi[j] - L[i, j] += np.sum(cumphi * self.U[i] * self.W[j]) - return (L) - - def expandInv(self): - r""" - Expand the inverse of the matrix as a full (n x n) matrix. - - Warnings - -------- - This non-sparse representation has a - :math:`\mathcal{O}(n^2)` cost and footprint. - """ - - invC = np.empty((self.n, self.n)) - ei = np.zeros(self.n) - for i in range(self.n): - ei[i] = 1.0 - invC[:, i] = self.solveLT(self.solveL(ei) / self.D) - ei[i] = 0.0 - return (invC) - - def expandInvL(self): - r""" - Expand :math:`L^{-1}` as a full (n x n) matrix. - - Warnings - -------- - This non-sparse representation has a - :math:`\mathcal{O}(n^2)` cost and footprint. - """ - - invL = np.empty((self.n, self.n)) - ei = np.zeros(self.n) - for i in range(self.n): - ei[i] = 1.0 - invL[:, i] = self.solveL(ei) - ei[i] = 0.0 - return (invL) - - def logdet(self): - r""" - Compute the (natural) logarithm of the determinant of the matrix. - - Returns - ------- - logdet : float - The natural logarithm of the determinant. - - Notes - ----- - This is a lazy computation (the result is stored for future calls). - """ - - if self._logdet_value is None: - self._logdet_value = np.sum(np.log(self.D)) - return (self._logdet_value) - - def sqD(self): - r""" - Compute the square-root of `D`. - - Returns - ------- - sqD : (n,) ndarray - The square-root of `D`. - - Notes - ----- - This is a lazy computation (the result is stored for future calls). - """ - - if self._sqD_value is None: - self._sqD_value = np.sqrt(self.D) - return (self._sqD_value) - - def dotL(self, x, copy=False): - r""" - Compute :math:`y = L x`. - - Parameters - ---------- - x : (n,) ndarray - The input vector :math:`x`. - copy : bool - Whether to copy arrays. - - Returns - ------- - y : (n,) ndarray - The dot product :math:`y = L x`. - """ - - self._x_dotL = self._copy(x, copy) - y = np.empty_like(x) - libspleaf.spleaf_dotL(self.n, self.r, self.offsetrow, self.b, self.U, - self.W, self.phi, self.G, x, y, self._f_dotL) - return (y) - - def solveL(self, y, copy=False): - r""" - Solve for :math:`x = L^{-1} y`. - - Parameters - ---------- - y : (n,) ndarray - The righthand side vector :math:`y`. - copy : bool - Whether to copy arrays. - - Returns - ------- - x : (n,) ndarray - The solution :math:`x = L^{-1} y`. - """ - - self._x_solveL = np.empty_like(y) - libspleaf.spleaf_solveL(self.n, self.r, self.offsetrow, self.b, self.U, - self.W, self.phi, self.G, y, self._x_solveL, self._f_solveL) - return (self._copy(self._x_solveL, copy)) - - def dotLT(self, x, copy=False): - r""" - Compute :math:`y = L^T x`. - - Parameters - ---------- - x : (n,) ndarray - The input vector :math:`x`. - copy : bool - Whether to copy arrays. - - Returns - ------- - y : (n,) ndarray - The dot product :math:`y = L^T x`. - """ - - self._x_dotLT = self._copy(x, copy) - y = np.empty_like(x) - libspleaf.spleaf_dotLT(self.n, self.r, self.offsetrow, self.b, self.U, - self.W, self.phi, self.G, x, y, self._g_dotLT) - return (y) - - def solveLT(self, y, copy=False): - r""" - Solve for :math:`x = L^{-T} y`. - - Parameters - ---------- - y : (n,) ndarray - The righthand side vector :math:`y`. - copy : bool - Whether to copy arrays. - - Returns - ------- - x : (n,) ndarray - The solution :math:`x = L^{-T} y`. - """ - - self._x_solveLT = np.empty_like(y) - libspleaf.spleaf_solveLT(self.n, self.r, self.offsetrow, self.b, self.U, - self.W, self.phi, self.G, y, self._x_solveLT, self._g_solveLT) - return (self._copy(self._x_solveLT, copy)) - - def init_grad(self): - r""" - Initialize (or reinitialize) the backward propagation of the gradient. - """ - - self._grad_A = np.zeros_like(self.A) - self._grad_U = np.zeros_like(self.U) - self._grad_V = np.zeros_like(self.V) - self._grad_phi = np.zeros_like(self.phi) - self._grad_F = np.zeros_like(self.F) - - self._grad_D = np.zeros_like(self.D) - self._grad_Ucho = np.zeros_like(self.U) - self._grad_W = np.zeros_like(self.W) - self._grad_phicho = np.zeros_like(self.phi) - self._grad_G = np.zeros_like(self.G) - - def cholesky_back(self): - r""" - Backward propagation of the gradient for the Cholesky decomposition. - - Propagate the gradient of a function with respect to `D` - and to the components of :math:`L` (`U`, `W`, `phi`, `G`), - to its gradient with respect to the initial components of the matrix - (`A`, `U`, `V`, `phi`, `F`). - - Use :func:`grad_param` to get the results. - """ - - libspleaf.spleaf_cholesky_back(self.n, self.r, self.offsetrow, self.b, - self.D, self.U, self.W, self.phi, self.G, self._grad_D, self._grad_Ucho, - self._grad_W, self._grad_phicho, self._grad_G, self._grad_A, - self._grad_U, self._grad_V, self._grad_phi, self._grad_F, self._S, - self._Z) - - def dotL_back(self, grad_y): - r""" - Backward propagation of the gradient for :func:`dotL`. - - Propagate the gradient of a function with respect to `y`, - to its gradient with respect to `x` - and to the components of :math:`L` - (`U`, `W`, `phi`, `G`). - - Use :func:`cholesky_back` to propagate the gradient - to the initial components of the matrix - (`A`, `U`, `V`, `phi`, `F`). - - Parameters - ---------- - grad_y : (n,) ndarray - Gradient of the function with respect to `y`. - - Returns - ------- - grad_x : (n,) ndarray - Gradient of the function with respect to `x`. - """ - - grad_x = np.empty_like(grad_y) - libspleaf.spleaf_dotL_back(self.n, self.r, self.offsetrow, self.b, self.U, - self.W, self.phi, self.G, self._x_dotL, grad_y, self._grad_Ucho, - self._grad_W, self._grad_phicho, self._grad_G, grad_x, self._f_dotL) - return (grad_x) - - def solveL_back(self, grad_x): - r""" - Backward propagation of the gradient for :func:`solveL`. - - Propagate the gradient of a function with respect to `x`, - to its gradient with respect to `y` - and to the components of :math:`L` - (`U`, `W`, `phi`, `G`). - - Use :func:`cholesky_back` to propagate the gradient - to the initial components of the matrix - (`A`, `U`, `V`, `phi`, `F`). - - Parameters - ---------- - grad_x : (n,) ndarray - Gradient of the function with respect to `x`. - - Returns - ------- - grad_y : (n,) ndarray - Gradient of the function with respect to `y`. - """ - - grad_y = np.empty_like(grad_x) - libspleaf.spleaf_solveL_back(self.n, self.r, self.offsetrow, self.b, - self.U, self.W, self.phi, self.G, self._x_solveL, grad_x, - self._grad_Ucho, self._grad_W, self._grad_phicho, self._grad_G, grad_y, - self._f_solveL) - return (grad_y) - - def dotLT_back(self, grad_y): - r""" - Backward propagation of the gradient for :func:`dotLT`. - - Propagate the gradient of a function with respect to `y`, - to its gradient with respect to `x` - and to the components of :math:`L` - (`U`, `W`, `phi`, `G`). - - Use :func:`cholesky_back` to propagate the gradient - to the initial components of the matrix - (`A`, `U`, `V`, `phi`, `F`). - - Parameters - ---------- - grad_y : (n,) ndarray - Gradient of the function with respect to `y`. - - Returns - ------- - grad_x : (n,) ndarray - Gradient of the function with respect to `x`. - """ - - grad_x = np.empty_like(grad_y) - libspleaf.spleaf_dotLT_back(self.n, self.r, self.offsetrow, self.b, self.U, - self.W, self.phi, self.G, self._x_dotLT, grad_y, self._grad_Ucho, - self._grad_W, self._grad_phicho, self._grad_G, grad_x, self._g_dotLT) - return (grad_x) - - def solveLT_back(self, grad_x): - r""" - Backward propagation of the gradient for :func:`solveLT`. - - Propagate the gradient of a function with respect to `x`, - to its gradient with respect to `y` - and to the components of :math:`L` - (`U`, `W`, `phi`, `G`). - - Use :func:`cholesky_back` to propagate the gradient - to the initial components of the matrix - (`A`, `U`, `V`, `phi`, `F`). - - Parameters - ---------- - grad_x : (n,) ndarray - Gradient of the function with respect to `x`. - - Returns - ------- - grad_y : (n,) ndarray - Gradient of the function with respect to `y`. - """ - - grad_y = np.empty_like(grad_x) - libspleaf.spleaf_solveLT_back(self.n, self.r, self.offsetrow, self.b, - self.U, self.W, self.phi, self.G, self._x_solveLT, grad_x, - self._grad_Ucho, self._grad_W, self._grad_phicho, self._grad_G, grad_y, - self._g_solveLT) - return (grad_y) - - def grad_param(self, *args, **kwargs): - r""" - Gradient of a function with respect to - the initial parameters (`A`, `U`, `V`, `phi`, `F`), - after a call to :func:`cholesky_back`. - - Returns - ------- - grad_A : (n,) ndarray - Gradient of the function with respect to `A`. - grad_U : (n, r) ndarray - Gradient of the function with respect to `U`. - grad_V : (n, r) ndarray - Gradient of the function with respect to `V`. - grad_phi : (n-1, r) ndarray - Gradient of the function with respect to `phi`. - grad_F : ndarray - Gradient of the function with respect to `F`. - """ - - return (self._grad_A, self._grad_U, self._grad_V, self._grad_phi, - self._grad_F) - - def chi2(self, y): - r""" - Compute :math:`\chi^2 = y^T C^{-1} y` - for a given vector of residuals :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of residuals :math:`y`. - - Returns - ------- - chi2 : float - The :math:`\chi^2`. - """ - - x = self.solveL(y) - return (np.sum(x * x / self.D)) - - def loglike(self, y): - r""" - Compute the (natural) logarithm of the likelihood - for a given vector of residuals :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of residuals :math:`y`. - - Returns - ------- - loglike : float - The natural logarithm of the likelihood. - """ - - return (-0.5 * - (self.chi2(y) + self.logdet() + self.n * np.log(2.0 * np.pi))) - - def chi2_grad(self, *args, **kwargs): - r""" - Compute the gradient of the :math:`\chi^2` (:func:`chi2`) - with respect to the residuals and to the initial parameters - (see :func:`grad_param`). - - Returns - ------- - grad_y : (n,) ndarray - Gradient of the :math:`\chi^2` with respect to the residuals :math:`y`. - ... - See :func:`grad_param`. - """ - - self.init_grad() - xoD = self._x_solveL / self.D - grad_x = 2.0 * xoD - self._grad_D = -xoD * xoD - grad_y = self.solveL_back(grad_x) - self.cholesky_back() - return (grad_y, self.grad_param(*args, **kwargs)) - - def loglike_grad(self, *args, **kwargs): - r""" - Compute the gradient of the log-likelihood (:func:`loglike`) - with respect to the residuals and to the initial parameters - (see :func:`grad_param`). - - Returns - ------- - grad_y : (n,) ndarray - Gradient of the log-likelihood with respect to the residuals :math:`y`. - ... - See :func:`grad_param`. - """ - - self.init_grad() - xoD = self._x_solveL / self.D - grad_x = -xoD - self._grad_D = 0.5 * (xoD * xoD - 1.0 / self.D) - grad_y = self.solveL_back(grad_x) - self.cholesky_back() - return (grad_y, self.grad_param(*args, **kwargs)) - - def self_conditional(self, y, calc_cov=False, index=None): - r""" - Compute the conditional mean and covariance - of the Gaussian process corresponding to the semiseparable part - of the covariance matrix, knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - calc_cov : False (default), True, or 'diag' - Whether to output only the conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - index : (r',) ndarray or None - Vector (of type int) giving the indices of semiseparable terms - that should be considered for the Gaussian process. - Other terms (semiseparable or leaf) are considered as noise. - If index is None, all semiserable terms are considered for the - Gaussian process. - - Returns - ------- - mu : (n,) ndarray - The vector of conditional mean values. - cov : (n, n) ndarray - Full covariance matrix (if calc_cov is True). - var : (n,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - - Warnings - -------- - While the computational cost of the conditional mean scales as - :math:`\mathcal{O}(n)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n^2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n^3)`. - """ - - if index is None: - index = np.arange(self.r) - ri = index.size - - u = self.solveLT(self.solveL(y) / self.D) - y2 = np.empty(self.n) - libspleaf.spleaf_dotsep(self.n, self.r, ri, index, self.U, self.V, - self.phi, u, y2) - - if not calc_cov: - return (y2) - - K = np.empty((self.n, self.n)) - libspleaf.spleaf_expandsep(self.n, self.r, ri, index, self.U, self.V, - self.phi, K) - H = np.array([self.solveL(Kk) / self.sqD() for Kk in K]) - - if calc_cov == 'diag': - return (y2, np.diag(K) - np.sum(H * H, axis=1)) - - return (y2, K - H @ H.T) - - def conditional(self, - y, - U2, - V2, - phi2, - ref2left, - phi2left, - phi2right, - calc_cov=False, - index=None): - r""" - Conditional mean and covariance at new abscissas - of the Gaussian process corresponding to the semiseparable part - of the covariance matrix, knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - U2, V2 : (n2, r) ndarrays - Symmetric semiseparable part at new abscissas, - with preconditioning matrix `phi2`. - phi2 : (n2-1, r) ndarray - Preconditioning matrix for the semiseparable part at new abscissas. - ref2left : (n2,) ndarray - Indices of the closest original abscissas to the left of new abscissas. - phi2left : (n2, r) ndarray - Preconditioning matrix linking new abscissas - with their closest original abscissas to the left. - phi2right : (n2, r) ndarray - Preconditioning matrix linking new abscissas - with their closest original abscissas to the right. - calc_cov : False (default), True, or 'diag' - Whether to output only the conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - index : (r',) ndarray or None - Vector (of type int) giving the indices of semiseparable terms - that should be considered for the Gaussian process. - Other terms (semiseparable or leaf) are considered as noise. - If index is None, all semiserable terms are considered for the - Gaussian process. - - Returns - ------- - mu : (n2,) ndarray - The vector of conditional mean values. - cov : (n2, n2) ndarray - Full covariance matrix (if calc_cov is True). - var : (n2,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - - Warnings - -------- - While the computational cost of the conditional mean scales as - :math:`\mathcal{O}(n+n_2)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n n_2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n n_2^2)`. - """ - - if index is None: - index = np.arange(self.r) - ri = index.size - - u = self.solveLT(self.solveL(y) / self.D) - n2 = U2.shape[0] - y2 = np.empty(n2) - libspleaf.spleaf_dotsepmixt(self.n, n2, self.r, ri, index, self.U, self.V, - self.phi, U2, V2, ref2left, phi2left, phi2right, u, y2) - - if not calc_cov: - return (y2) - - Km = np.empty((n2, self.n)) - libspleaf.spleaf_expandsepmixt(self.n, n2, self.r, ri, index, self.U, - self.V, self.phi, U2, V2, ref2left, phi2left, phi2right, Km) - Hm = np.array([self.solveL(Kmk) / self.sqD() for Kmk in Km]) - - if calc_cov == 'diag': - return (y2, - np.sum(U2[:, index] * V2[:, index], axis=1) - np.sum(Hm * Hm, axis=1)) - - K = np.empty((n2, n2)) - libspleaf.spleaf_expandsep(n2, self.r, ri, index, U2, V2, phi2, K) - return (y2, K - Hm @ Hm.T) - - def self_conditional_derivative(self, - y, - dU=None, - dV=None, - calc_cov=False, - index=None): - r""" - Conditional mean and covariance - of the derivative of the Gaussian process corresponding to the semiseparable part - of the covariance matrix, knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - dU, dV : (n, r) ndarrays or None - Semiseparable part of the derivatives. - If None, the values from a previous call are kept. - calc_cov : False (default), True, or 'diag' - Whether to output only the conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - index : (r',) ndarray or None - Vector (of type int) giving the indices of semiseparable terms - that should be considered for the Gaussian process. - Other terms (semiseparable or leaf) are considered as noise. - If index is None, all semiserable terms are considered for the - Gaussian process. - - Returns - ------- - mu : (n, ) ndarray - The vector of derivative conditional mean values. - cov : (n, n) ndarray - Full covariance matrix (if calc_cov is True). - var : (n,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - - Warnings - -------- - While the computational cost of the derivative conditional mean scales as - :math:`\mathcal{O}(n)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n^2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n^3)`. - """ - - if index is None: - index = np.arange(self.r) - ri = index.size - - if dU is not None: - self._dU = dU - if dV is not None: - self._dV = dV - - u = self.solveLT(self.solveL(y) / self.D) - dy = np.empty(self.n) - - libspleaf.spleaf_dotantisep(self.n, self.r, ri, index, self._dU, self.V, - self.phi, u, dy) - - if not calc_cov: - return (dy) - - dK = np.empty((self.n, self.n)) - d2K = np.empty((self.n, self.n)) - libspleaf.spleaf_expandantisep(self.n, self.r, ri, index, self._dU, self.V, - self.phi, dK) - libspleaf.spleaf_expandsep(self.n, self.r, ri, index, self._dU, self._dV, - self.phi, d2K) - H = np.array([self.solveL(dKk) / self.sqD() for dKk in dK]) - - if calc_cov == 'diag': - return (dy, np.diag(d2K) - np.sum(H * H, axis=1)) - - return (dy, d2K - H @ H.T) - - def conditional_derivative(self, - y, - dU2, - V2, - dV2, - phi2, - ref2left, - phi2left, - phi2right, - dU=None, - calc_cov=False, - index=None): - r""" - Conditional mean and covariance at new abscissas - of the derivative of the Gaussian process corresponding to the semiseparable part - of the covariance matrix, knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - dU2, V2, dV2 : (n2, r) ndarrays - Semiseparable part at new abscissas, - with preconditioning matrix `phi2`. - phi2 : (n2-1, r) ndarray - Preconditioning matrix for the semiseparable part at new abscissas. - ref2left : (n2,) ndarray - Indices of the closest original abscissas to the left of new abscissas. - phi2left : (n2, r) ndarray - Preconditioning matrix linking new abscissas - with their closest original abscissas to the left. - phi2right : (n2, r) ndarray - Preconditioning matrix linking new abscissas - with their closest original abscissas to the right. - dU : (n, r) ndarray or None - Semiseparable part of the derivative. - If None, the value from a previous call is kept. - calc_cov : False (default), True, or 'diag' - Whether to output only the conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - index : (r',) ndarray or None - Vector (of type int) giving the indices of semiseparable terms - that should be considered for the Gaussian process. - Other terms (semiseparable or leaf) are considered as noise. - If index is None, all semiserable terms are considered for the - Gaussian process. - - Returns - ------- - mu : (n2,) ndarray - The vector of derivative conditional mean values. - cov : (n2, n2) ndarray - Full covariance matrix (if calc_cov is True). - var : (n2,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - - Warnings - -------- - While the computational cost of the derivative conditional mean scales as - :math:`\mathcal{O}(n+n_2)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n n_2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n n_2^2)`. - """ - - if index is None: - index = np.arange(self.r) - ri = index.size - - if dU is not None: - self._dU = dU - - u = self.solveLT(self.solveL(y) / self.D) - n2 = dU2.shape[0] - y2 = np.empty(n2) - libspleaf.spleaf_dotsepmixt(self.n, n2, self.r, ri, index, -self._dU, - self.V, self.phi, dU2, V2, ref2left, phi2left, phi2right, u, y2) - - if not calc_cov: - return (y2) - - dKm = np.empty((n2, self.n)) - libspleaf.spleaf_expandsepmixt(self.n, n2, self.r, ri, index, -self._dU, - self.V, self.phi, dU2, V2, ref2left, phi2left, phi2right, dKm) - Hm = np.array([self.solveL(dKmk) / self.sqD() for dKmk in dKm]) - - if calc_cov == 'diag': - return (y2, np.sum(dU2[:, index] * dV2[:, index], axis=1) - - np.sum(Hm * Hm, axis=1)) - - d2K = np.empty((n2, n2)) - libspleaf.spleaf_expandsep(n2, self.r, ri, index, dU2, dV2, phi2, d2K) - return (y2, d2K - Hm @ Hm.T) - - def sample(self, nreal=None): - r""" - Generate random samples from the covariance matrix. - - Parameters - ---------- - nreal : int - Number of realizations to generate. - If None, only one realization is generated. - - Returns - ------- - y : (nreal, n) or (n,) ndarray - Matrix of the samples (or vector if nreal is None). - """ - - single = False - if nreal is None: - single = True - nreal = 1 - u = np.random.normal(size=(nreal, self.n)) - y = np.array([self.dotL(self.sqD() * uk) for uk in u]) - if single: - return (y[0]) - else: - return (y) diff --git a/kima/vendor/spleaf/spleaf/cov.py b/kima/vendor/spleaf/spleaf/cov.py deleted file mode 100644 index 8c5a5bc..0000000 --- a/kima/vendor/spleaf/spleaf/cov.py +++ /dev/null @@ -1,550 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2020-2022 Jean-Baptiste Delisle -# -# This file is part of spleaf. -# -# spleaf is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# spleaf is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with spleaf. If not, see . - -__all__ = ['Cov'] - -import numpy as np -from . import Spleaf, libspleaf -from .term import Noise, Kernel - - -def merge_series(list_t, *args): - r""" - Merge and sort several time series by increasing time. - - Parameters - ---------- - list_t : list of ndarrays - Times of measurement for each time series. - *args : additional lists of ndarrays - Complementary arrays to be merged and sorted with the same order as the time. - - Returns - ------- - full_t : ndarray - Merged and sorted array of times. - *full_args : additional ndarrays - Merged and sorted complementary arrays. - series_index : list of ndarrays - Indices corresponding to each time series in the merged arrays. - """ - - n_series = len(list_t) - list_n = [tk.size for tk in list_t] - cum_n = np.insert(np.cumsum(list_n), 0, 0) - full_t = np.hstack(list_t) - ksort = np.argsort(full_t) - full_t = full_t[ksort] - full_args = [np.hstack(arg)[ksort] for arg in args] - series_index = [ - np.where((ksort >= cum_n[k]) & (ksort < cum_n[k + 1]))[0] - for k in range(n_series) - ] - return (full_t, *full_args, series_index) - - -class Cov(Spleaf): - r""" - Covariance matrix class. - - The covariance is modeled as the sum of different components (or terms), - which split into two categories: - noise terms and kernel terms (gaussian processes). - See the :ref:`API reference` for a list of available terms. - - Each component is provided in \*\*kwargs, where the key is user-defined - and is used to refer to the term parameters. - - The covariance matrix is represented internally as - a S+LEAF matrix (see :class:`spleaf.Spleaf`). - - Parameters - ---------- - t : (n,) ndarray - Time of the measurements. - This array must be in increasing order. - **kwargs : - Components of the covariance matrix. - - Attributes - ---------- - t : (n,) ndarray - See parameters. - n : int - Number of measurements. - dt : (n-1,) ndarray - time between two measurements. - param : list, - List of all covariance parameters. - term : dict, - Dictionary of all covariance terms. - noise : dict, - Dictionary of noise terms. - kernel : dict, - Dictionary of kernel terms. - r, A, U, V, phi, offsetrow, b, F, D, W, G : - S+LEAF representation of the covariance matrix - (see :class:`spleaf.Spleaf`). - """ - - def __init__(self, t, **kwargs): - self.t = t - if not isinstance(t, np.ndarray): - raise Exception('Cov: t is not an array.') - self.n = t.size - self.dt = t[1:] - t[:-1] - if np.min(self.dt) < 0: - raise Exception('Cov: the timeseries must be provided' - ' in increasing order.') - - # Read kwargs - self.noise = {} - self.b = np.zeros(self.n, dtype=int) - self.kernel = {} - self.r = 0 - self.term = {} - self.param = [] - self._param_dict = {} - for key in kwargs: - if isinstance(kwargs[key], Noise): - self.noise[key] = kwargs[key] - kwargs[key]._link(self) - self.b = np.maximum(self.b, kwargs[key]._b) - elif isinstance(kwargs[key], Kernel): - self.kernel[key] = kwargs[key] - kwargs[key]._link(self, self.r) - self.r += kwargs[key]._r - else: - raise Exception( - 'The provided argument is not of type Noise or Kernel.') - self.term[key] = kwargs[key] - self.param += [f'{key}.{par}' for par in kwargs[key]._param] - self._param_dict.update( - {f'{key}.{par}': (key, par) - for par in kwargs[key]._param}) - - # Compute S+LEAF representation - self.A = np.zeros(self.n) - self.U = np.empty((self.n, self.r)) - self.V = np.empty((self.n, self.r)) - self.phi = np.empty((self.n - 1, self.r)) - self.offsetrow = np.cumsum(self.b - 1) + 1 - self.F = np.zeros(np.sum(self.b)) - for key in self.term: - self.term[key]._compute() - - super().__init__(self.A, self.U, self.V, self.phi, self.offsetrow, self.b, - self.F) - - # Kernel derivative - self._dU = np.empty((self.n, self.r)) - self._dV = np.empty((self.n, self.r)) - - def get_param(self, param=None): - r""" - Get the values of the parameters. - - Parameters - ---------- - param : list or str or None - List of parameters (or single parameter). - If None, all the covariance parameters are provided. - - Returns - ------- - value : (p,) ndarray or float - Values of the parameters. - """ - - single = False - if param is None: - param = self.param - if isinstance(param, str): - param = [param] - single = True - value = np.empty(len(param)) - for k, keypar in enumerate(param): - key, par = self._param_dict[keypar] - value[k] = self.term[key]._get_param(par) - return (value[0] if single else value) - - def set_param(self, value, param=None): - r""" - Set the values of the parameters. - - Parameters - ---------- - value : (p,) ndarray or float - Values of the parameters. - - param : list or str or None - List of parameters (or single parameter). - If None, all the covariance parameters are set. - """ - - if param is None: - param = self.param - if isinstance(param, str): - param = [param] - value = np.array([value]) - param_split = {key: {} for key in self.term} - for keypar, val in zip(param, value): - key, par = self._param_dict[keypar] - param_split[key][par] = val - self.A[:] = 0 - self.F[:] = 0 - for key in self.term: - if param_split[key] != {}: - self.term[key]._set_param(**param_split[key]) - self.term[key]._recompute() - - super().set_param(self.A, self.U, self.V, self.phi, self.F) - - def grad_param(self, param=None): - r""" - Gradient of a function with respect to - the parameters, after a call to :func:`cholesky_back`. - - Parameters - ---------- - param : list or str or None - List of parameters (or single parameter). - If None, all the covariance parameters are provided. - - Returns - ------- - grad_param : (p,) ndarray or float - Gradient of the function with respect to the parameters. - """ - single = False - if param is None: - param = self.param - term = self.term - else: - if isinstance(param, str): - param = [param] - single = True - term = {self._param_dict[keypar][0] for keypar in param} - self._sum_grad_A = np.sum(self._grad_A) - grad = {} - for key in term: - grad_key = self.term[key]._grad_param() - for par in grad_key: - grad[f'{key}.{par}'] = grad_key[par] - if single: - return (grad[param[0]]) - else: - return (np.array([grad[keypar] for keypar in param])) - - def _kernel_index(self, kernel=None): - r""" - List of indices corresponding to the requested kernel terms - in the semiseparable representation of the matrix. - - Parameters - ---------- - kernel : list or None - List of kernel identifiers. - - Returns - ------- - index : (r',) ndarray - Indices of the corresponding semiseparable terms. - """ - - if kernel is None: - return (None) - else: - return (np.array([ - s for key in kernel - for s in range(self.kernel[key]._offset, self.kernel[key]._offset + - self.kernel[key]._r) - ], - dtype=int)) - - def self_conditional(self, y, calc_cov=False, kernel=None): - r""" - Conditional mean and covariance - of the kernel part, or a subset of kernel terms, - knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - calc_cov : False (default), True, or 'diag' - Whether to output only the conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - kernel : list or None - List of kernel identifiers - that should be considered for the Gaussian process. - Other terms (kernel or noise) are considered as noise. - If kernel is None, all kernel terms are considered for the - Gaussian process. - - Returns - ------- - mu : (n,) ndarray - The vector of conditional mean values. - cov : (n, n) ndarray - Full covariance matrix (if calc_cov is True). - var : (n,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - - Warnings - -------- - While the computational cost of the conditional mean scales as - :math:`\mathcal{O}(n)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n^2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n^3)`. - """ - - return (super().self_conditional(y, calc_cov, self._kernel_index(kernel))) - - def conditional(self, y, t2, calc_cov=False, kernel=None): - r""" - Conditional mean and covariance - of the kernel part, or a subset of kernel terms, - at new times :math:`t_2`, - knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - t2 : (n2,) ndarrays - The vector of new times. - calc_cov : False (default), True, or 'diag' - Whether to output only the conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - kernel : list or None - List of kernel identifiers - that should be considered for the Gaussian process. - Other terms (kernel or noise) are considered as noise. - If kernel is None, all kernel terms are considered for the - Gaussian process. - - Returns - ------- - mu : (n2,) ndarray - The vector of conditional mean values. - cov : (n2, n2) ndarray - Full covariance matrix (if calc_cov is True). - var : (n2,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - - Warnings - -------- - While the computational cost of the conditional mean scales as - :math:`\mathcal{O}(n+n_2)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n n_2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n n_2^2)`. - """ - - n2 = t2.size - dt2 = t2[1:] - t2[:-1] - U2 = np.empty((n2, self.r)) - V2 = np.empty((n2, self.r)) - phi2 = np.empty((n2 - 1, self.r)) - phi2left = np.empty((n2, self.r)) - phi2right = np.empty((n2, self.r)) - - ref2left = np.searchsorted(self.t, t2) - 1 - dt2left = t2 - self.t[ref2left] - dt2right = self.t[np.minimum(ref2left + 1, self.n - 1)] - t2 - dt2left[ref2left == -1] = 0 # useless but avoid overflow warning - dt2right[ref2left == self.n - 1] = 0 # useless but avoid overflow warning - - kernel_list = self.kernel if kernel is None else kernel - for key in kernel_list: - self.kernel[key]._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left, - dt2right, phi2left, phi2right) - - return (super().conditional(y, U2, V2, phi2, ref2left, phi2left, phi2right, - calc_cov, self._kernel_index(kernel))) - - def self_conditional_derivative(self, y, calc_cov=False, kernel=None): - r""" - Conditional mean and covariance - of the derivative of the kernel part, or a subset of kernel terms, - knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - calc_cov : False (default), True, or 'diag' - Whether to output only the derivative conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - kernel : list or None - List of kernel identifiers - that should be considered for the Gaussian process. - Other terms (kernel or noise) are considered as noise. - If kernel is None, all kernel terms are considered for the - Gaussian process. - - Returns - ------- - mu : (n,) ndarray - The vector of derivative conditional mean values. - cov : (n, n) ndarray - Full covariance matrix (if calc_cov is True). - var : (n,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - - Warnings - -------- - This method should only be used with differentiable kernels. - The ExponentialKernel and QuasiperiodicKernel are - in the general case non-differentiable. - All other kernels are differentiable. - - While the computational cost of the derivative conditional mean scales as - :math:`\mathcal{O}(n)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n^2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n^3)`. - """ - - kernel_list = self.kernel if kernel is None else kernel - for key in kernel_list: - self.kernel[key]._deriv(calc_cov) - - return (super().self_conditional_derivative(y, - calc_cov=calc_cov, - index=self._kernel_index(kernel))) - - def conditional_derivative(self, y, t2, calc_cov=False, kernel=None): - r""" - Conditional mean and covariance - of the derivative of the kernel part, or a subset of kernel terms, - at new times :math:`t_2`, - knowning the observed values :math:`y`. - - Parameters - ---------- - y : (n,) ndarray - The vector of observed values :math:`y`. - t2 : (n2,) ndarrays - The vector of new times. - calc_cov : False (default), True, or 'diag' - Whether to output only the derivative conditional mean (False), - the mean and full covariance matrix (True), - or the mean and main diagonal of the covariance matrix ('diag'). - - Returns - ------- - mu : (n2,) ndarray - The vector of derivative conditional mean values. - cov : (n2, n2) ndarray - Full covariance matrix (if calc_cov is True). - var : (n2,) ndarray - Main diagonal of the covariance matrix (if calc_cov is 'diag'). - kernel : list or None - List of kernel identifiers - that should be considered for the Gaussian process. - Other terms (kernel or noise) are considered as noise. - If kernel is None, all kernel terms are considered for the - Gaussian process. - - Warnings - -------- - This method should only be used with differentiable kernels. - The ExponentialKernel and QuasiperiodicKernel are - in the general case non-differentiable. - All other kernels are differentiable. - - While the computational cost of the derivative conditional mean scales as - :math:`\mathcal{O}(n+n_2)`, - the computational cost of the variance scales as - :math:`\mathcal{O}(n n_2)`, - and the computational cost of the full covariance scales as - :math:`\mathcal{O}(n n_2^2)`. - """ - - n2 = t2.size - dt2 = t2[1:] - t2[:-1] - dU2 = np.empty((n2, self.r)) - V2 = np.empty((n2, self.r)) - phi2 = np.empty((n2 - 1, self.r)) - phi2left = np.empty((n2, self.r)) - phi2right = np.empty((n2, self.r)) - - ref2left = np.searchsorted(self.t, t2) - 1 - dt2left = t2 - self.t[ref2left] - dt2right = self.t[np.minimum(ref2left + 1, self.n - 1)] - t2 - dt2left[ref2left == -1] = 0 # useless but avoid overflow warning - dt2right[ref2left == self.n - 1] = 0 # useless but avoid overflow warning - - if calc_cov: - dV2 = np.empty((n2, self.r)) - else: - dV2 = None - - kernel_list = self.kernel if kernel is None else kernel - for key in kernel_list: - self.kernel[key]._deriv(False) - self.kernel[key]._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left, - dt2right, phi2left, phi2right, dV2) - - return (super().conditional_derivative(y, - dU2, - V2, - dV2, - phi2, - ref2left, - phi2left, - phi2right, - calc_cov=calc_cov, - index=self._kernel_index(kernel))) - - def eval(self, dt, kernel=None): - r""" - Direct evaluation of the kernel part at lag :math:`\delta t`. - - Parameters - ---------- - dt : ndarray or float - lag. - kernel : list or None - List of kernel identifiers - that should be considered for the evaluation. - If kernel is None, all kernel terms are taken into account. - - Returns - ------- - K : ndarray or float - Kernel part evaluated at lag dt. - - Warnings - -------- - The cost scales as the size of the lag ndarray. - """ - - if kernel is None: - kernel = self.kernel - return (sum(self.kernel[key].eval(dt) for key in kernel)) diff --git a/kima/vendor/spleaf/spleaf/libspleaf.c b/kima/vendor/spleaf/spleaf/libspleaf.c deleted file mode 100644 index cecad29..0000000 --- a/kima/vendor/spleaf/spleaf/libspleaf.c +++ /dev/null @@ -1,1058 +0,0 @@ -// Copyright 2019-2022 Jean-Baptiste Delisle -// -// This file is part of spleaf. -// -// spleaf is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// spleaf is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with spleaf. If not, see . - -#include "libspleaf.h" - -void spleaf_cholesky( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *A, double *U, double *V, double *phi, double *F, - // Output - double *D, double *W, double *G, - // Temporary - double *S, double *Z) -{ - // Cholesky decomposition of the (n x n) symmetric S+LEAF - // (semiseparable + leaf) matrix C - // defined as - // C = A + Sep + F - // with - // * A: the diagonal part of C, stored as a vector of size n. - // * Sep: the symmetric semiseparable part of C. - // For i > j, - // Sep_{i,j} = Sep_{j,i} - // = Sum_{s=0}^{r-1} U_{i,s} V_{j,s} Prod_{k=j}^{i-1} phi_{k,s} - // where U, V are (n x r) matrices, and phi is a (n-1 x r) matrix, - // all stored in row major order. - // By definition Sep_{i,i} = 0. - // * F: the symmetric leaf part of C, - // stored in strictly lower triangular form, and in row major order. - // The i-th row of F is of size b[i], i.e., by definition, - // F_{i,j} = 0 for j j, - // Lsep_{i,j} = Sum_{s=0}^{r-1} U_{i,s} W_{j,s} Prod_{k=j}^{i-1} phi_{k,s}, - // where U and phi are left unchanged and W is a (n x r) matrix (like V). - // * G: the strictly lower triangular leaf part of L. - // G is stored in the same way as F. - - long i, j, k, s, t; - long r2 = r * r; - double SU, GD; - - // Copy A -> D, V -> W, F -> G - memcpy(D, A, n * sizeof(double)); - memcpy(W, V, n * r * sizeof(double)); - memcpy(G, F, (offsetrow[n - 1] + n - 1) * sizeof(double)); - - // Case i = 0 - // Normalize W_{0,s} - for (s = 0; s < r; s++) { - W[s] /= D[0]; - } - // Initialize S - for (s = 0; s < r2; s++) { - S[s] = 0.0; - } - - for (i = 1; i < n; i++) { - // Initialize Z - for (s = 0; s < r; s++) { - Z[r * (offsetrow[i] + 2 * i - b[i]) + s] = 0.0; - } - - // Compute G_{i,j} (without normalizing by D_j yet) - // Case j = i-b[i] -> nothing to do - // Case j > i-b[i] - for (j = i - b[i] + 1; j < i; j++) { - // Purely leaf terms - for (k = MAX(i - b[i], j - b[j]); k < j; k++) { - // Note that G_{i,k} has not been normalized by D_k - // but G_{j,k} is already normalized by D_k - G[offsetrow[i] + j] -= G[offsetrow[i] + k] * G[offsetrow[j] + k]; - } - // Mixed terms - for (s = 0; s < r; s++) { - // Update Z - // Note that G_{i,j-1} has not been normalized by D_{j-1} yet - Z[r * (offsetrow[i] + i + j) + s] = phi[r * (j - 1) + s] * - (Z[r * (offsetrow[i] + i + j - 1) + s] + - G[offsetrow[i] + j - 1] * W[r * (j - 1) + s]); - G[offsetrow[i] + j] -= U[r * j + s] * Z[r * (offsetrow[i] + i + j) + s]; - } - } - - // Compute D_i, W_{i,s} (without normalizing by D_i yet) - for (s = 0; s < r; s++) { - // Compute Z_{i,i,s} - // Note that G_{i,i-1} has not been normalized by D_{i-1} yet - if (b[i] > 0) { - Z[r * (offsetrow[i] + 2 * i) + s] = phi[r * (i - 1) + s] * - (Z[r * (offsetrow[i] + 2 * i - 1) + s] + - G[offsetrow[i] + i - 1] * W[r * (i - 1) + s]); - } - // Compute S_{i,s,.} U_{i,.} - SU = 0.0; - for (t = 0; t < r; t++) { - // Update S - S[r2 * i + r * s + t] = phi[r * (i - 1) + s] * phi[r * (i - 1) + t] * - (S[r2 * (i - 1) + r * s + t] + - W[r * (i - 1) + s] * D[i - 1] * W[r * (i - 1) + t]); - SU += S[r2 * i + r * s + t] * U[r * i + t]; - } - // Compute D_i (omiting purely leaf terms) - D[i] -= U[r * i + s] * (SU + 2.0 * Z[r * (offsetrow[i] + 2 * i) + s]); - // Compute W_{i,s} - W[r * i + s] -= SU + Z[r * (offsetrow[i] + 2 * i) + s]; - } - - // Normalize G_{i,j} and compute purely leaf terms in D_i - for (j = i - b[i]; j < i; j++) { - // Normalize G_{i,j} (+ store non-normalized value) - GD = G[offsetrow[i] + j]; - G[offsetrow[i] + j] /= D[j]; - // Purely leaf terms in D_i - D[i] -= GD * G[offsetrow[i] + j]; - } - - // Normalize W_{i,s} - for (s = 0; s < r; s++) { - W[r * i + s] /= D[i]; - } - } -} - -void spleaf_dotL( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, - // Output - double *y, - // Temporary - double *f) -{ - // Compute y = L x, - // where L comes from the Cholesky decomposition C = L D L^T - // of a symmetric S+LEAF matrix C using spleaf_cholesky. - - long i, j, s; - - // Copy x -> y - memcpy(y, x, n * sizeof(double)); - - // Initialize f - for (s = 0; s < r; s++) { - f[s] = 0.0; - } - - // Compute y = L x - for (i = 1; i < n; i++) { - // Semiseparable terms - for (s = 0; s < r; s++) { - // Update f - f[r * i + s] = phi[r * (i - 1) + s] * - (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]); - y[i] += U[r * i + s] * f[r * i + s]; - } - // Leaf terms - for (j = i - b[i]; j < i; j++) { - y[i] += G[offsetrow[i] + j] * x[j]; - } - } -} - -void spleaf_solveL( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *y, - // Output - double *x, - // Temporary - double *f) -{ - // Solve for x = L^-1 y, - // where L comes from the Cholesky decomposition C = L D L^T - // of a symmetric S+LEAF matrix C using spleaf_cholesky. - - long i, j, s; - - // Copy y -> x - memcpy(x, y, n * sizeof(double)); - - // Initialize f - for (s = 0; s < r; s++) { - f[s] = 0.0; - } - - // Solve for x = L^-1 y - for (i = 1; i < n; i++) { - // Semiseparable terms - for (s = 0; s < r; s++) { - // Update f - f[r * i + s] = phi[r * (i - 1) + s] * - (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]); - x[i] -= U[r * i + s] * f[r * i + s]; - } - // Leaf terms - for (j = i - b[i]; j < i; j++) { - x[i] -= G[offsetrow[i] + j] * x[j]; - } - } -} - -void spleaf_dotLT( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, - // Output - double *y, - // Temporary - double *g) -{ - // Compute y = L^T x, - // where L comes from the Cholesky decomposition C = L D L^T - // of a symmetric S+LEAF matrix C using spleaf_cholesky. - - long i, j, s; - - // Copy x -> y - memcpy(y, x, n * sizeof(double)); - - // Initialize g - for (s = 0; s < r; s++) { - g[(n - 1) * r + s] = 0.0; - } - - // Leaf terms for n-1 - for (j = n - 1 - b[n - 1]; j < n - 1; j++) { - y[j] += G[offsetrow[n - 1] + j] * x[n - 1]; - } - - // Loop for i < n-1 - for (i = n - 2; i >= 0; i--) { - // Semiseparable terms - for (s = 0; s < r; s++) { - // Update g - g[r * i + s] = - phi[r * i + s] * (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]); - y[i] += W[r * i + s] * g[r * i + s]; - } - // Leaf terms - for (j = i - b[i]; j < i; j++) { - y[j] += G[offsetrow[i] + j] * x[i]; - } - } -} - -void spleaf_solveLT( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *y, - // Output - double *x, - // Temporary - double *g) -{ - // Solve for x = L^-T y, - // where L comes from the Cholesky decomposition C = L D L^T - // of a symmetric S+LEAF matrix C using spleaf_cholesky. - - long i, j, s; - - // Copy y -> x - memcpy(x, y, n * sizeof(double)); - - // Initialize g - for (s = 0; s < r; s++) { - g[(n - 1) * r + s] = 0.0; - } - - // Leaf terms for n-1 - for (j = n - 1 - b[n - 1]; j < n - 1; j++) { - x[j] -= G[offsetrow[n - 1] + j] * x[n - 1]; - } - - // Loop for i < n-1 - for (i = n - 2; i >= 0; i--) { - // Semiseparable terms - for (s = 0; s < r; s++) { - // Update g - g[r * i + s] = - phi[r * i + s] * (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]); - x[i] -= W[r * i + s] * g[r * i + s]; - } - // Leaf terms - for (j = i - b[i]; j < i; j++) { - x[j] -= G[offsetrow[i] + j] * x[i]; - } - } -} - -void spleaf_cholesky_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *D, double *U, double *W, double *phi, double *G, double *grad_D, - double *grad_Ucho, double *grad_W, double *grad_phicho, double *grad_G, - // Output - double *grad_A, double *grad_U, double *grad_V, double *grad_phi, - double *grad_F, - // Temporary - double *S, double *Z) -{ - // Backward propagation of the gradient for spleaf_cholesky. - - long i, j, k, s, t; - long r2 = r * r; - double SU; - double grad_SU, grad_GD; - double *grad_S, *grad_Z; - double grad_tmp; - - grad_S = (double *)malloc(r2 * sizeof(double)); - grad_Z = (double *)malloc(r * sizeof(double)); - - // Copy grad_D -> grad_A, grad_Ucho -> grad_U, grad_W -> grad_V, - // grad_phicho -> grad_phi, grad_G -> grad_F - memcpy(grad_A, grad_D, n * sizeof(double)); - memcpy(grad_U, grad_Ucho, n * r * sizeof(double)); - memcpy(grad_V, grad_W, n * r * sizeof(double)); - memcpy(grad_phi, grad_phicho, (n - 1) * r * sizeof(double)); - memcpy(grad_F, grad_G, (offsetrow[n - 1] + n - 1) * sizeof(double)); - - // Initialize grad_S - for (s = 0; s < r2; s++) { - grad_S[s] = 0.0; - } - - // Reversed main loop - for (i = n - 1; i > 0; i--) { - for (s = 0; s < r; s++) { - // W[r*i+s] /= D[i]; - grad_V[r * i + s] /= D[i]; - grad_A[i] -= W[r * i + s] * grad_V[r * i + s]; - } - - for (j = i - b[i]; j < i; j++) { - // D[i] -= GD * G[offsetrow[i]+j]; - // G[offsetrow[i]+j] /= D[j]; - grad_GD = -G[offsetrow[i] + j] * grad_A[i]; - grad_F[offsetrow[i] + j] /= D[j]; - grad_F[offsetrow[i] + j] += grad_GD; - grad_A[j] -= G[offsetrow[i] + j] * grad_F[offsetrow[i] + j]; - // GD = G[offsetrow[i]+j]; - grad_F[offsetrow[i] + j] += grad_GD; - } - - for (s = 0; s < r; s++) { - // Precompute SU - SU = 0.0; - for (t = 0; t < r; t++) { - SU += S[r2 * i + r * s + t] * U[r * i + t]; - } - // W[r*i+s] -= SU + Z[r*(offsetrow[i]+2*i)+s]; - grad_SU = -grad_V[r * i + s]; - grad_Z[s] = -grad_V[r * i + s]; - // D[i] -= U[r*i+s]*(SU + 2.0*Z[r*(offsetrow[i]+2*i)+s]); - grad_U[r * i + s] -= - (SU + 2.0 * Z[r * (offsetrow[i] + 2 * i) + s]) * grad_A[i]; - grad_SU -= U[r * i + s] * grad_A[i]; - grad_Z[s] -= 2.0 * U[r * i + s] * grad_A[i]; - for (t = 0; t < r; t++) { - // SU += S[r2*i+r*s+t] * U[r*i+t]; - grad_S[r * s + t] += U[r * i + t] * grad_SU; - grad_U[r * i + t] += S[r2 * i + r * s + t] * grad_SU; - // S[r2*i+r*s+t] = phi[r*(i-1)+s] * phi[r*(i-1)+t] * - // (S[r2*(i-1)+r*s+t] + W[r*(i-1)+s] * D[i-1] * W[r*(i-1)+t]); - // Let us decompose it: - // S[r2*i+r*s+t] *= phi[r*(i-1)+s] * phi[r*(i-1)+t]; - // We could do: - // grad_phi[r*(i-1)+s] += S[r2*i+r*s+t]/phi[r*(i-1)+s] * grad_S[r*s+t]; - // grad_phi[r*(i-1)+t] += S[r2*i+r*s+t]/phi[r*(i-1)+t] * grad_S[r*s+t]; - // But unstable if phi << 1 - // Better to do: - grad_tmp = (S[r2 * (i - 1) + r * s + t] + - W[r * (i - 1) + s] * D[i - 1] * W[r * (i - 1) + t]) * - grad_S[r * s + t]; - grad_phi[r * (i - 1) + s] += phi[r * (i - 1) + t] * grad_tmp; - grad_phi[r * (i - 1) + t] += phi[r * (i - 1) + s] * grad_tmp; - grad_S[r * s + t] *= phi[r * (i - 1) + s] * phi[r * (i - 1) + t]; - // S[r2*i+r*s+t] = S[r2*(i-1)+r*s+t] + - // W[r*(i-1)+s] * D[i-1] * W[r*(i-1)+t]; - grad_V[r * (i - 1) + s] += - D[i - 1] * W[r * (i - 1) + t] * grad_S[r * s + t]; - grad_A[i - 1] += - W[r * (i - 1) + s] * W[r * (i - 1) + t] * grad_S[r * s + t]; - grad_V[r * (i - 1) + t] += - W[r * (i - 1) + s] * D[i - 1] * grad_S[r * s + t]; - } - if (b[i] > 0) { - // Z[r*(offsetrow[i]+2*i)+s] = phi[r*(i-1)+s] * - // (Z[r*(offsetrow[i]+2*i-1)+s] + - // G[offsetrow[i]+i-1] * W[r*(i-1)+s]); - // Let us decompose it: - // Z[r*(offsetrow[i]+2*i)+s] *= phi[r*(i-1)+s] - // We could do: - // grad_phi[r*(i-1)+s] += Z[r*(offsetrow[i]+2*i)+s]/phi[r*(i-1)+s] * - // grad_Z[s]; - // But unstable if phi << 1 - // Better to do: - grad_phi[r * (i - 1) + s] += - (Z[r * (offsetrow[i] + 2 * i - 1) + s] + - G[offsetrow[i] + i - 1] * D[i - 1] * W[r * (i - 1) + s]) * - grad_Z[s]; - grad_Z[s] *= phi[r * (i - 1) + s]; - // Z[r*(offsetrow[i]+2*i)+s] = Z[r*(offsetrow[i]+2*i-1)+s] + - // G[offsetrow[i]+i-1] * W[r*(i-1)+s]; - grad_F[offsetrow[i] + i - 1] += W[r * (i - 1) + s] * grad_Z[s]; - grad_V[r * (i - 1) + s] += - G[offsetrow[i] + i - 1] * D[i - 1] * grad_Z[s]; - } - } - - for (j = i - 1; j > i - b[i]; j--) { - for (s = 0; s < r; s++) { - // G[offsetrow[i]+j] -= U[r*j+s] * Z[r*(offsetrow[i]+i+j)+s]; - grad_Z[s] -= U[r * j + s] * grad_F[offsetrow[i] + j]; - grad_U[r * j + s] -= - Z[r * (offsetrow[i] + i + j) + s] * grad_F[offsetrow[i] + j]; - // Z[r*(offsetrow[i]+i+j)+s] = phi[r*(j-1)+s] * - // (Z[r*(offsetrow[i]+i+j-1)+s] + - // G[offsetrow[i]+j-1] * W[r*(j-1)+s]); - // Let us decompose it: - // Z[r*(offsetrow[i]+i+j)+s] *= phi[r*(j-1)+s] - // We could do: - // grad_phi[r*(j-1)+s] += Z[r*(offsetrow[i]+i+j)+s]/phi[r*(j-1)+s] * - // grad_Z[s]; - // But unstable if phi << 1 - // Better to do: - grad_phi[r * (j - 1) + s] += - (Z[r * (offsetrow[i] + i + j - 1) + s] + - G[offsetrow[i] + j - 1] * D[j - 1] * W[r * (j - 1) + s]) * - grad_Z[s]; - grad_Z[s] *= phi[r * (j - 1) + s]; - // Z[r*(offsetrow[i]+i+j)+s] = Z[r*(offsetrow[i]+i+j-1)+s] + - // G[offsetrow[i]+j-1] * W[r*(j-1)+s]; - grad_F[offsetrow[i] + j - 1] += W[r * (j - 1) + s] * grad_Z[s]; - grad_V[r * (j - 1) + s] += - G[offsetrow[i] + j - 1] * D[j - 1] * grad_Z[s]; - } - - for (k = j - 1; k >= MAX(i - b[i], j - b[j]); k--) { - // G[offsetrow[i]+j] -= G[offsetrow[i]+k] * G[offsetrow[j]+k]; - grad_F[offsetrow[i] + k] -= - G[offsetrow[j] + k] * grad_F[offsetrow[i] + j]; - grad_F[offsetrow[j] + k] -= - G[offsetrow[i] + k] * D[k] * grad_F[offsetrow[i] + j]; - } - } - } - - // i = 0 - for (s = 0; s < r; s++) { - // W[s] /= D[0]; - grad_V[s] /= D[0]; - grad_A[0] -= W[s] * grad_V[s]; - } - - free(grad_S); - free(grad_Z); -} - -void spleaf_dotL_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_y, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_x, - // Temporary - double *f) -{ - // Backward propagation of the gradient for spleaf_dotL. - - long i, j, s; - double *grad_f; - - grad_f = (double *)malloc(r * sizeof(double)); - - // Copy grad_y -> grad_x - memcpy(grad_x, grad_y, n * sizeof(double)); - - // Initialize grad_f - for (s = 0; s < r; s++) { - grad_f[s] = 0.0; - } - - // Reverse main loop - for (i = n - 1; i > 0; i--) { - for (j = i - b[i]; j < i; j++) { - // y[i] += G[offsetrow[i]+j] * x[j]; - grad_G[offsetrow[i] + j] += x[j] * grad_y[i]; - grad_x[j] += G[offsetrow[i] + j] * grad_y[i]; - } - for (s = 0; s < r; s++) { - // y[i] += U[r*i+s] * f[r*i+s]; - grad_U[r * i + s] += f[r * i + s] * grad_y[i]; - grad_f[s] += U[r * i + s] * grad_y[i]; - // f[r*i+s] = phi[r*(i-1)+s] * (f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1]); - // Let us decompose it: - // f[r*i+s] *= phi[r*(i-1)+s]; - // We could do: - // grad_phi[r*(i-1)+s] += f[r*i+s]/phi[r*(i-1)+s] * grad_f[s]; - // But unstable if phi << 1 - // Better to do: - grad_phi[r * (i - 1) + s] += - (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]) * grad_f[s]; - grad_f[s] *= phi[r * (i - 1) + s]; - // f[r*i+s] = f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1]; - grad_W[r * (i - 1) + s] += x[i - 1] * grad_f[s]; - grad_x[i - 1] += W[r * (i - 1) + s] * grad_f[s]; - } - } - - free(grad_f); -} - -void spleaf_solveL_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_x, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_y, - // Temporary - double *f) -{ - // Backward propagation of the gradient for spleaf_solveL. - - long i, j, s; - double *grad_f; - - grad_f = (double *)malloc(r * sizeof(double)); - - // Copy grad_x -> grad_y - memcpy(grad_y, grad_x, n * sizeof(double)); - - // Initialize grad_f - for (s = 0; s < r; s++) { - grad_f[s] = 0.0; - } - - // Reverse main loop - for (i = n - 1; i > 0; i--) { - for (j = i - 1; j >= i - b[i]; j--) { - // x[i] -= G[offsetrow[i]+j] * x[j]; - grad_G[offsetrow[i] + j] -= x[j] * grad_y[i]; - grad_y[j] -= G[offsetrow[i] + j] * grad_y[i]; - } - for (s = 0; s < r; s++) { - // x[i] -= U[r*i+s] * f[r*i+s]; - grad_U[r * i + s] -= f[r * i + s] * grad_y[i]; - grad_f[s] -= U[r * i + s] * grad_y[i]; - // f[r*i+s] = phi[r*(i-1)+s] * (f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1]); - // Let us decompose it: - // f[r*i+s] *= phi[r*(i-1)+s]; - // We could do: - // grad_phi[r*(i-1)+s] += f[r*i+s]/phi[r*(i-1)+s] * grad_f[s]; - // But unstable if phi << 1 - // Better to do: - grad_phi[r * (i - 1) + s] += - (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]) * grad_f[s]; - grad_f[s] *= phi[r * (i - 1) + s]; - // f[r*i+s] = f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1]; - grad_W[r * (i - 1) + s] += x[i - 1] * grad_f[s]; - grad_y[i - 1] += W[r * (i - 1) + s] * grad_f[s]; - } - } - - free(grad_f); -} - -void spleaf_dotLT_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_y, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_x, - // Temporary - double *g) -{ - // Backward propagation of the gradient for spleaf_dotLT. - - long i, j, s; - double *grad_g; - - grad_g = (double *)malloc(r * sizeof(double)); - - // Copy grad_y -> grad_x - memcpy(grad_x, grad_y, n * sizeof(double)); - - // Initialize grad_g - for (s = 0; s < r; s++) { - grad_g[s] = 0.0; - } - - // Reverse main loop - for (i = 0; i < n - 1; i++) { - for (j = i - b[i]; j < i; j++) { - // y[j] += G[offsetrow[i]+j] * x[i]; - grad_G[offsetrow[i] + j] += x[i] * grad_y[j]; - grad_x[i] += G[offsetrow[i] + j] * grad_y[j]; - } - for (s = 0; s < r; s++) { - // y[i] += W[r*i+s] * g[r*i+s]; - grad_W[r * i + s] += g[r * i + s] * grad_y[i]; - grad_g[s] += W[r * i + s] * grad_y[i]; - - // g[r*i+s] = phi[r*i+s] * (g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1]); - // Let us decompose it: - // g[r*i+s] *= phi[r*i+s]; - // We could do: - // grad_phi[r*i+s] += g[r*i+s]/phi[r*i+s] * grad_g[s]; - // But unstable if phi << 1 - // Better to do: - grad_phi[r * i + s] += - (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]) * grad_g[s]; - grad_g[s] *= phi[r * i + s]; - // g[r*i+s] = g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1]; - grad_U[r * (i + 1) + s] += x[i + 1] * grad_g[s]; - grad_x[i + 1] += U[r * (i + 1) + s] * grad_g[s]; - } - } - - // Leaf terms for n-1 - for (j = n - 1 - b[n - 1]; j < n - 1; j++) { - // y[j] += G[offsetrow[n-1]+j] * x[n-1]; - grad_G[offsetrow[n - 1] + j] += x[n - 1] * grad_y[j]; - grad_x[n - 1] += G[offsetrow[n - 1] + j] * grad_y[j]; - } - - free(grad_g); -} - -void spleaf_solveLT_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_x, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_y, - // Temporary - double *g) -{ - // Backward propagation of the gradient for spleaf_solveLT. - - long i, j, s; - double *grad_g; - - grad_g = (double *)malloc(r * sizeof(double)); - - // Copy grad_x -> grad_y - memcpy(grad_y, grad_x, n * sizeof(double)); - - // Initialize grad_g - for (s = 0; s < r; s++) { - grad_g[s] = 0.0; - } - - // Reverse main loop - for (i = 0; i < n - 1; i++) { - for (j = i - b[i]; j < i; j++) { - // x[j] -= G[offsetrow[i]+j] * x[i]; - grad_G[offsetrow[i] + j] -= x[i] * grad_y[j]; - grad_y[i] -= G[offsetrow[i] + j] * grad_y[j]; - } - for (s = 0; s < r; s++) { - // x[i] -= W[r*i+s] * g[r*i+s]; - grad_W[r * i + s] -= g[r * i + s] * grad_y[i]; - grad_g[s] -= W[r * i + s] * grad_y[i]; - - // g[r*i+s] = phi[r*i+s] * (g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1]); - // Let us decompose it: - // g[r*i+s] *= phi[r*i+s]; - // We could do: - // grad_phi[r*i+s] += g[r*i+s]/phi[r*i+s] * grad_g[s]; - // But unstable if phi << 1 - // Better to do: - grad_phi[r * i + s] += - (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]) * grad_g[s]; - grad_g[s] *= phi[r * i + s]; - // g[r*i+s] = g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1]; - grad_U[r * (i + 1) + s] += x[i + 1] * grad_g[s]; - grad_y[i + 1] += U[r * (i + 1) + s] * grad_g[s]; - } - } - - // Leaf terms for n-1 - for (j = n - 1 - b[n - 1]; j < n - 1; j++) { - // x[j] -= G[offsetrow[n-1]+j] * x[n-1]; - grad_G[offsetrow[n - 1] + j] -= x[n - 1] * grad_y[j]; - grad_y[n - 1] -= G[offsetrow[n - 1] + j] * grad_y[j]; - } - - free(grad_g); -} - -void spleaf_expandsep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, - // Output - double *K) -{ - // Expand the semiseparable part of a symmetric S+LEAF matrix, - // or a subset of semiseparable terms, - // as a full (n x n) matrix. - // This is useful for the conditional covariance computation. - - long i, j, s; - double *f; - - f = (double *)malloc(rsi * sizeof(double)); - - for (i = 0; i < n; i++) { - K[(n + 1) * i] = 0.0; - for (s = 0; s < rsi; s++) { - K[(n + 1) * i] += U[r * i + sepindex[s]] * V[r * i + sepindex[s]]; - f[s] = 1.0; - } - for (j = i - 1; j >= 0; j--) { - K[n * i + j] = 0.0; - for (s = 0; s < rsi; s++) { - f[s] *= phi[r * j + sepindex[s]]; - K[n * i + j] += f[s] * U[r * i + sepindex[s]] * V[r * j + sepindex[s]]; - } - K[n * j + i] = K[n * i + j]; - } - } - - free(f); -} - -void spleaf_expandsepmixt( - // Shape - long n1, long n2, long r, long rsi, long *sepindex, - // Input - double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left, - double *phi2left, double *phi2right, - // Output - double *Km) -{ - // Expand the semiseparable mixt part of a symmetric S+LEAF matrix, - // or a subset of semiseparable terms, - // as a full (n2 x n1) matrix. - // This is useful for the conditional covariance computation. - - long i1, i2, j1, j2, s; - double *f; - - f = (double *)malloc(rsi * sizeof(double)); - - // Forward part (U2 V1^T) - j2 = 0; - for (j1 = 0; j1 <= ref2left[n2 - 1]; j1++) { - for (s = 0; s < rsi; s++) { - f[s] = V1[r * j1 + sepindex[s]]; - } - while ((j2 < n2) && (ref2left[j2] < j1)) { - j2++; - } - i1 = j1; - i2 = j2; - while (i2 < n2) { - while (i1 < ref2left[i2]) { - for (s = 0; s < rsi; s++) { - f[s] *= phi1[r * i1 + sepindex[s]]; - } - i1++; - } - while ((i2 < n2) && (ref2left[i2] == i1)) { - Km[n1 * i2 + j1] = 0.0; - for (s = 0; s < rsi; s++) { - Km[n1 * i2 + j1] += - U2[r * i2 + sepindex[s]] * phi2left[r * i2 + sepindex[s]] * f[s]; - } - i2++; - } - } - } - // Backward part (V2 U1^T) - j2 = n2 - 1; - for (j1 = n1 - 1; j1 > ref2left[0]; j1--) { - for (s = 0; s < rsi; s++) { - f[s] = U1[r * j1 + sepindex[s]]; - } - while ((j2 >= 0) && (ref2left[j2] >= j1)) { - j2--; - } - i1 = j1 - 1; - i2 = j2; - while (i2 >= 0) { - while (i1 > ref2left[i2]) { - for (s = 0; s < rsi; s++) { - f[s] *= phi1[r * i1 + sepindex[s]]; - } - i1--; - } - while ((i2 >= 0) && (ref2left[i2] == i1)) { - Km[n1 * i2 + j1] = 0.0; - for (s = 0; s < rsi; s++) { - Km[n1 * i2 + j1] += - V2[r * i2 + sepindex[s]] * phi2right[r * i2 + sepindex[s]] * f[s]; - } - i2--; - } - } - } - - free(f); -} - -void spleaf_expandantisep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, - // Output - double *K) -{ - // Expand the semiseparable part of an anit-symmetric S+LEAF matrix, - // or a subset of semiseparable terms, - // as a full (n x n) matrix. - // This is useful for the conditional derivative covariance computation. - - long i, j, s; - double *f; - - f = (double *)malloc(rsi * sizeof(double)); - - for (i = 0; i < n; i++) { - K[(n + 1) * i] = 0.0; - for (s = 0; s < rsi; s++) { - f[s] = 1.0; - } - for (j = i - 1; j >= 0; j--) { - K[n * i + j] = 0.0; - for (s = 0; s < rsi; s++) { - f[s] *= phi[r * j + sepindex[s]]; - K[n * i + j] += f[s] * U[r * i + sepindex[s]] * V[r * j + sepindex[s]]; - } - K[n * j + i] = -K[n * i + j]; - } - } - - free(f); -} - -void spleaf_dotsep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, double *x, - // Output - double *y) -{ - // Compute y = K x, - // where K is the (n x n) semiseparable part of a symmetric S+LEAF matrix, - // or a subset of semiseparable terms. - // This is useful for the conditional mean computation. - - long i, s; - double *f; - - f = (double *)malloc(rsi * sizeof(double)); - - // Forward part (U V^T) + diagonal - // Initialize f and y[0] - y[0] = 0.0; - for (s = 0; s < rsi; s++) { - f[s] = V[sepindex[s]] * x[0]; - y[0] += U[sepindex[s]] * f[s]; - } - for (i = 1; i < n; i++) { - y[i] = 0.0; - for (s = 0; s < rsi; s++) { - // Update f - f[s] = - phi[r * (i - 1) + sepindex[s]] * f[s] + V[r * i + sepindex[s]] * x[i]; - y[i] += U[r * i + sepindex[s]] * f[s]; - } - } - // Backward part (V U^T) - // Initialize f - for (s = 0; s < rsi; s++) { - f[s] = 0.0; - } - for (i = n - 2; i >= 0; i--) { - for (s = 0; s < rsi; s++) { - // Update f - f[s] = phi[r * i + sepindex[s]] * - (f[s] + U[r * (i + 1) + sepindex[s]] * x[i + 1]); - y[i] += V[r * i + sepindex[s]] * f[s]; - } - } - - free(f); -} - -void spleaf_dotsepmixt( - // Shape - long n1, long n2, long r, long rsi, long *sepindex, - // Input - double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left, - double *phi2left, double *phi2right, double *x, - // Output - double *y) -{ - // Compute y = Km x, - // where Km is the (n2 x n1) semiseparable mixt part - // of a symmetric S+LEAF matrix, - // or a subset of semiseparable terms. - // This is useful for the conditional mean computation. - - long i, j, s; - double *f; - - f = (double *)malloc(rsi * sizeof(double)); - - // Forward part (U2 V1^T) - i = 0; - while ((i < n2) && (ref2left[i] == -1)) { - y[i] = 0.0; - i++; - } - // Initialize f - for (s = 0; s < rsi; s++) { - f[s] = V1[sepindex[s]] * x[0]; - } - j = 0; - while (i < n2) { - // Update f - while (j < ref2left[i]) { - for (s = 0; s < rsi; s++) { - f[s] = phi1[r * j + sepindex[s]] * f[s] + - V1[r * (j + 1) + sepindex[s]] * x[j + 1]; - } - j++; - } - // Compute forward part of y[i] - y[i] = 0.0; - for (s = 0; s < rsi; s++) { - y[i] += U2[r * i + sepindex[s]] * phi2left[r * i + sepindex[s]] * f[s]; - } - i++; - } - // Backward part (V2 U1^T) - i = n2 - 1; - while ((i >= 0) && (ref2left[i] == n1 - 1)) { - i--; - } - // Initialize f - for (s = 0; s < rsi; s++) { - f[s] = U1[r * (n1 - 1) + sepindex[s]] * x[n1 - 1]; - } - j = n1 - 2; - while (i >= 0) { - // Update f - while (j > ref2left[i]) { - for (s = 0; s < rsi; s++) { - f[s] = - phi1[r * j + sepindex[s]] * f[s] + U1[r * j + sepindex[s]] * x[j]; - } - j--; - } - // Compute backward part of y[i] - for (s = 0; s < rsi; s++) { - y[i] += V2[r * i + sepindex[s]] * phi2right[r * i + sepindex[s]] * f[s]; - } - i--; - } - - free(f); -} - -void spleaf_dotantisep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, double *x, - // Output - double *y) -{ - // Compute y = K x, - // where K is the (n x n) semiseparable part of an anti-symmetric S+LEAF - // matrix, or a subset of semiseparable terms. This is useful for the - // conditional derivative mean computation. - - long i, s; - double *f; - - f = (double *)malloc(rsi * sizeof(double)); - - // Forward part (U V^T) - // Initialize f and y[0] - y[0] = 0.0; - for (s = 0; s < rsi; s++) { - f[s] = 0.0; - } - for (i = 1; i < n; i++) { - y[i] = 0.0; - for (s = 0; s < rsi; s++) { - // Update f - f[s] = phi[r * (i - 1) + sepindex[s]] * - (f[s] + V[r * (i - 1) + sepindex[s]] * x[i - 1]); - y[i] += U[r * i + sepindex[s]] * f[s]; - } - } - // Backward part (-V U^T) - // Initialize f - for (s = 0; s < rsi; s++) { - f[s] = 0.0; - } - for (i = n - 2; i >= 0; i--) { - for (s = 0; s < rsi; s++) { - // Update f - f[s] = phi[r * i + sepindex[s]] * - (f[s] + U[r * (i + 1) + sepindex[s]] * x[i + 1]); - y[i] -= V[r * i + sepindex[s]] * f[s]; - } - } - - free(f); -} diff --git a/kima/vendor/spleaf/spleaf/libspleaf.h b/kima/vendor/spleaf/spleaf/libspleaf.h deleted file mode 100644 index a4ecd8a..0000000 --- a/kima/vendor/spleaf/spleaf/libspleaf.h +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2019-2022 Jean-Baptiste Delisle -// -// This file is part of spleaf. -// -// spleaf is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// spleaf is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with spleaf. If not, see . - -#include -#include -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - -void spleaf_cholesky( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *A, double *U, double *V, double *phi, double *F, - // Output - double *D, double *W, double *G, - // Temporary - double *S, double *Z); - -void spleaf_dotL( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, - // Output - double *y, - // Temporary - double *f); - -void spleaf_solveL( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *y, - // Output - double *x, - // Temporary - double *f); - -void spleaf_dotLT( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, - // Output - double *y, - // Temporary - double *g); - -void spleaf_solveLT( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *y, - // Output - double *x, - // Temporary - double *g); - -void spleaf_cholesky_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *D, double *U, double *W, double *phi, double *G, double *grad_D, - double *grad_Ucho, double *grad_W, double *grad_phicho, double *grad_G, - // Output - double *grad_A, double *grad_U, double *grad_V, double *grad_phi, - double *grad_F, - // Temporary - double *S, double *Z); - -void spleaf_dotL_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_y, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_x, - // Temporary - double *f); - -void spleaf_solveL_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_x, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_y, - // Temporary - double *f); - -void spleaf_dotLT_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_y, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_x, - // Temporary - double *g); - -void spleaf_solveLT_back( - // Shape - long n, long r, long *offsetrow, long *b, - // Input - double *U, double *W, double *phi, double *G, double *x, double *grad_x, - // Output - double *grad_U, double *grad_W, double *grad_phi, double *grad_G, - double *grad_y, - // Temporary - double *g); - -void spleaf_expandsep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, - // Output - double *K); - -void spleaf_expandsepmixt( - // Shape - long n1, long n2, long r, long rsi, long *sepindex, - // Input - double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left, - double *phi2left, double *phi2right, - // Output - double *Km); - -void spleaf_expandantisep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, - // Output - double *K); - -void spleaf_dotsep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, double *x, - // Output - double *y); - -void spleaf_dotsepmixt( - // Shape - long n1, long n2, long r, long rsi, long *sepindex, - // Input - double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left, - double *phi2left, double *phi2right, double *x, - // Output - double *y); - -void spleaf_dotantisep( - // Shape - long n, long r, long rsi, long *sepindex, - // Input - double *U, double *V, double *phi, double *x, - // Output - double *y); diff --git a/kima/vendor/spleaf/spleaf/pywrapspleaf.c b/kima/vendor/spleaf/spleaf/pywrapspleaf.c deleted file mode 100644 index 7c5e145..0000000 --- a/kima/vendor/spleaf/spleaf/pywrapspleaf.c +++ /dev/null @@ -1,2015 +0,0 @@ -// Copyright 2019-2022 Jean-Baptiste Delisle -// -// This file is part of spleaf. -// -// spleaf is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// spleaf is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with spleaf. If not, see . - -#define NPY_NO_DEPRECATED_API NPY_1_18_API_VERSION - -#include "libspleaf.h" -#include -#include - -// Module docstring -static char module_docstring[] = - "This module provides an interface for the C library libspleaf."; - -// Methods docstrings -static char spleaf_cholesky_docstring[] = - "Cholesky decomposition of the (n x n) symmetric S+LEAF\n" - "(semiseparable + leaf) matrix C\n" - "defined as\n" - "C = A + Sep + F\n" - "with\n" - "* A: the diagonal part of C, stored as a vector of size n.\n" - "* Sep: the symmetric semiseparable part of C.\n" - " For i > j,\n" - " Sep_{i,j} = Sep_{j,i}\n" - " = Sum_{s=0}^{r-1} U_{i,s} V_{j,s} Prod_{k=j}^{i-1} phi_{k,s}\n" - " where U, V are (n x r) matrices, and phi is a (n-1 x r) matrix,\n" - " all stored in row major order.\n" - " By definition Sep_{i,i} = 0.\n" - "* F: the symmetric leaf part of C,\n" - " stored in strictly lower triangular form, and in row major order.\n" - " The i-th row of F is of size b[i], i.e., by definition,\n" - " F_{i,j} = 0 for j j,\n" - " Lsep_{i,j} = Sum_{s=0}^{r-1} U_{i,s} W_{j,s} Prod_{k=j}^{i-1} phi_{k,s},\n" - " where U and phi are left unchanged and W is a (n x r) matrix (like V).\n" - "* G: the strictly lower triangular leaf part of L.\n" - " G is stored in the same way as F.\n"; -static char spleaf_dotL_docstring[] = - "Compute y = L x,\n" - "where L comes from the Cholesky decomposition C = L D L^T\n" - "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n"; -static char spleaf_solveL_docstring[] = - "Solve for x = L^-1 y,\n" - "where L comes from the Cholesky decomposition C = L D L^T\n" - "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n"; -static char spleaf_dotLT_docstring[] = - "Compute y = L^T x,\n" - "where L comes from the Cholesky decomposition C = L D L^T\n" - "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n"; -static char spleaf_solveLT_docstring[] = - "Solve for x = L^-T y,\n" - "where L comes from the Cholesky decomposition C = L D L^T\n" - "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n"; -static char spleaf_cholesky_back_docstring[] = - "Backward propagation of the gradient for spleaf_cholesky.\n"; -static char spleaf_dotL_back_docstring[] = - "Backward propagation of the gradient for spleaf_dotL.\n"; -static char spleaf_solveL_back_docstring[] = - "Backward propagation of the gradient for spleaf_solveL.\n"; -static char spleaf_dotLT_back_docstring[] = - "Backward propagation of the gradient for spleaf_dotLT.\n"; -static char spleaf_solveLT_back_docstring[] = - "Backward propagation of the gradient for spleaf_solveLT.\n"; -static char spleaf_expandsep_docstring[] = - "Expand the semiseparable part of a symmetric S+LEAF matrix,\n" - "or a subset of semiseparable terms,\n" - "as a full (n x n) matrix.\n" - "This is useful for the conditional covariance computation.\n"; -static char spleaf_expandsepmixt_docstring[] = - "Expand the semiseparable mixt part of a symmetric S+LEAF matrix,\n" - "or a subset of semiseparable terms,\n" - "as a full (n2 x n1) matrix.\n" - "This is useful for the conditional covariance computation.\n"; -static char spleaf_expandantisep_docstring[] = - "Expand the semiseparable part of an anit-symmetric S+LEAF matrix,\n" - "or a subset of semiseparable terms,\n" - "as a full (n x n) matrix.\n" - "This is useful for the conditional derivative covariance computation.\n"; -static char spleaf_dotsep_docstring[] = - "Compute y = K x,\n" - "where K is the (n x n) semiseparable part of a symmetric S+LEAF matrix,\n" - "or a subset of semiseparable terms.\n" - "This is useful for the conditional mean computation.\n"; -static char spleaf_dotsepmixt_docstring[] = - "Compute y = Km x,\n" - "where Km is the (n2 x n1) semiseparable mixt part\n" - "of a symmetric S+LEAF matrix,\n" - "or a subset of semiseparable terms.\n" - "This is useful for the conditional mean computation.\n"; -static char spleaf_dotantisep_docstring[] = - "Compute y = K x,\n" - "where K is the (n x n) semiseparable part of an anti-symmetric S+LEAF\n" - "matrix, or a subset of semiseparable terms. This is useful for the\n" - "conditional derivative mean computation.\n"; - -// Module methods -static PyObject *libspleaf_spleaf_cholesky(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_dotL(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_solveL(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_dotLT(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_solveLT(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_cholesky_back(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_dotL_back(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_solveL_back(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_dotLT_back(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_solveLT_back(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_expandsep(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_expandsepmixt(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_expandantisep(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_dotsep(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_dotsepmixt(PyObject *self, PyObject *args); -static PyObject *libspleaf_spleaf_dotantisep(PyObject *self, PyObject *args); -static PyMethodDef module_methods[] = { - {"spleaf_cholesky", libspleaf_spleaf_cholesky, METH_VARARGS, spleaf_cholesky_docstring}, - {"spleaf_dotL", libspleaf_spleaf_dotL, METH_VARARGS, spleaf_dotL_docstring}, - {"spleaf_solveL", libspleaf_spleaf_solveL, METH_VARARGS, spleaf_solveL_docstring}, - {"spleaf_dotLT", libspleaf_spleaf_dotLT, METH_VARARGS, spleaf_dotLT_docstring}, - {"spleaf_solveLT", libspleaf_spleaf_solveLT, METH_VARARGS, spleaf_solveLT_docstring}, - {"spleaf_cholesky_back", libspleaf_spleaf_cholesky_back, METH_VARARGS, spleaf_cholesky_back_docstring}, - {"spleaf_dotL_back", libspleaf_spleaf_dotL_back, METH_VARARGS, spleaf_dotL_back_docstring}, - {"spleaf_solveL_back", libspleaf_spleaf_solveL_back, METH_VARARGS, spleaf_solveL_back_docstring}, - {"spleaf_dotLT_back", libspleaf_spleaf_dotLT_back, METH_VARARGS, spleaf_dotLT_back_docstring}, - {"spleaf_solveLT_back", libspleaf_spleaf_solveLT_back, METH_VARARGS, spleaf_solveLT_back_docstring}, - {"spleaf_expandsep", libspleaf_spleaf_expandsep, METH_VARARGS, spleaf_expandsep_docstring}, - {"spleaf_expandsepmixt", libspleaf_spleaf_expandsepmixt, METH_VARARGS, spleaf_expandsepmixt_docstring}, - {"spleaf_expandantisep", libspleaf_spleaf_expandantisep, METH_VARARGS, spleaf_expandantisep_docstring}, - {"spleaf_dotsep", libspleaf_spleaf_dotsep, METH_VARARGS, spleaf_dotsep_docstring}, - {"spleaf_dotsepmixt", libspleaf_spleaf_dotsepmixt, METH_VARARGS, spleaf_dotsepmixt_docstring}, - {"spleaf_dotantisep", libspleaf_spleaf_dotantisep, METH_VARARGS, spleaf_dotantisep_docstring}, - {NULL, NULL, 0, NULL}}; - -// Module definition -static struct PyModuleDef myModule = { - PyModuleDef_HEAD_INIT, "libspleaf", module_docstring, -1, module_methods}; - -// Module initialization -PyMODINIT_FUNC PyInit_libspleaf(void) -{ - // import numpy arrays - import_array(); - return PyModule_Create(&myModule); -} - -static PyObject *libspleaf_spleaf_cholesky(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_A; - PyObject *obj_U; - PyObject *obj_V; - PyObject *obj_phi; - PyObject *obj_F; - PyObject *obj_D; - PyObject *obj_W; - PyObject *obj_G; - PyObject *obj_S; - PyObject *obj_Z; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_A, - &obj_U, - &obj_V, - &obj_phi, - &obj_F, - &obj_D, - &obj_W, - &obj_G, - &obj_S, - &obj_Z)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_A = (PyArrayObject*) PyArray_FROM_OTF(obj_A, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_F = (PyArrayObject*) PyArray_FROM_OTF(obj_F, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_D = (PyArrayObject*) PyArray_FROM_OTF(obj_D, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_S = (PyArrayObject*) PyArray_FROM_OTF(obj_S, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_Z = (PyArrayObject*) PyArray_FROM_OTF(obj_Z, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_A == NULL || - arr_U == NULL || - arr_V == NULL || - arr_phi == NULL || - arr_F == NULL || - arr_D == NULL || - arr_W == NULL || - arr_G == NULL || - arr_S == NULL || - arr_Z == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_A); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_F); - Py_XDECREF(arr_D); - Py_XDECREF(arr_W); - Py_XDECREF(arr_G); - Py_XDECREF(arr_S); - Py_XDECREF(arr_Z); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *A = (double*)PyArray_DATA(arr_A); - double *U = (double*)PyArray_DATA(arr_U); - double *V = (double*)PyArray_DATA(arr_V); - double *phi = (double*)PyArray_DATA(arr_phi); - double *F = (double*)PyArray_DATA(arr_F); - double *D = (double*)PyArray_DATA(arr_D); - double *W = (double*)PyArray_DATA(arr_W); - double *G = (double*)PyArray_DATA(arr_G); - double *S = (double*)PyArray_DATA(arr_S); - double *Z = (double*)PyArray_DATA(arr_Z); - - // Call the C function from libspleaf - spleaf_cholesky( - n, - r, - offsetrow, - b, - A, - U, - V, - phi, - F, - D, - W, - G, - S, - Z); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_A); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_F); - Py_XDECREF(arr_D); - Py_XDECREF(arr_W); - Py_XDECREF(arr_G); - Py_XDECREF(arr_S); - Py_XDECREF(arr_Z); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_dotL(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_x; - PyObject *obj_y; - PyObject *obj_f; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_x, - &obj_y, - &obj_f)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_x == NULL || - arr_y == NULL || - arr_f == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - Py_XDECREF(arr_f); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *x = (double*)PyArray_DATA(arr_x); - double *y = (double*)PyArray_DATA(arr_y); - double *f = (double*)PyArray_DATA(arr_f); - - // Call the C function from libspleaf - spleaf_dotL( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - x, - y, - f); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - Py_XDECREF(arr_f); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_solveL(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_y; - PyObject *obj_x; - PyObject *obj_f; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_y, - &obj_x, - &obj_f)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_y == NULL || - arr_x == NULL || - arr_f == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_y); - Py_XDECREF(arr_x); - Py_XDECREF(arr_f); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *y = (double*)PyArray_DATA(arr_y); - double *x = (double*)PyArray_DATA(arr_x); - double *f = (double*)PyArray_DATA(arr_f); - - // Call the C function from libspleaf - spleaf_solveL( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - y, - x, - f); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_y); - Py_XDECREF(arr_x); - Py_XDECREF(arr_f); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_dotLT(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_x; - PyObject *obj_y; - PyObject *obj_g; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_x, - &obj_y, - &obj_g)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_x == NULL || - arr_y == NULL || - arr_g == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - Py_XDECREF(arr_g); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *x = (double*)PyArray_DATA(arr_x); - double *y = (double*)PyArray_DATA(arr_y); - double *g = (double*)PyArray_DATA(arr_g); - - // Call the C function from libspleaf - spleaf_dotLT( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - x, - y, - g); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - Py_XDECREF(arr_g); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_solveLT(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_y; - PyObject *obj_x; - PyObject *obj_g; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_y, - &obj_x, - &obj_g)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_y == NULL || - arr_x == NULL || - arr_g == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_y); - Py_XDECREF(arr_x); - Py_XDECREF(arr_g); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *y = (double*)PyArray_DATA(arr_y); - double *x = (double*)PyArray_DATA(arr_x); - double *g = (double*)PyArray_DATA(arr_g); - - // Call the C function from libspleaf - spleaf_solveLT( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - y, - x, - g); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_y); - Py_XDECREF(arr_x); - Py_XDECREF(arr_g); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_cholesky_back(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_D; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_grad_D; - PyObject *obj_grad_Ucho; - PyObject *obj_grad_W; - PyObject *obj_grad_phicho; - PyObject *obj_grad_G; - PyObject *obj_grad_A; - PyObject *obj_grad_U; - PyObject *obj_grad_V; - PyObject *obj_grad_phi; - PyObject *obj_grad_F; - PyObject *obj_S; - PyObject *obj_Z; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_D, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_grad_D, - &obj_grad_Ucho, - &obj_grad_W, - &obj_grad_phicho, - &obj_grad_G, - &obj_grad_A, - &obj_grad_U, - &obj_grad_V, - &obj_grad_phi, - &obj_grad_F, - &obj_S, - &obj_Z)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_D = (PyArrayObject*) PyArray_FROM_OTF(obj_D, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_D = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_D, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_Ucho = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_Ucho, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_phicho = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phicho, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_A = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_A, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_V = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_F = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_F, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_S = (PyArrayObject*) PyArray_FROM_OTF(obj_S, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_Z = (PyArrayObject*) PyArray_FROM_OTF(obj_Z, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_D == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_grad_D == NULL || - arr_grad_Ucho == NULL || - arr_grad_W == NULL || - arr_grad_phicho == NULL || - arr_grad_G == NULL || - arr_grad_A == NULL || - arr_grad_U == NULL || - arr_grad_V == NULL || - arr_grad_phi == NULL || - arr_grad_F == NULL || - arr_S == NULL || - arr_Z == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_D); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_grad_D); - Py_XDECREF(arr_grad_Ucho); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phicho); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_A); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_V); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_F); - Py_XDECREF(arr_S); - Py_XDECREF(arr_Z); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *D = (double*)PyArray_DATA(arr_D); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *grad_D = (double*)PyArray_DATA(arr_grad_D); - double *grad_Ucho = (double*)PyArray_DATA(arr_grad_Ucho); - double *grad_W = (double*)PyArray_DATA(arr_grad_W); - double *grad_phicho = (double*)PyArray_DATA(arr_grad_phicho); - double *grad_G = (double*)PyArray_DATA(arr_grad_G); - double *grad_A = (double*)PyArray_DATA(arr_grad_A); - double *grad_U = (double*)PyArray_DATA(arr_grad_U); - double *grad_V = (double*)PyArray_DATA(arr_grad_V); - double *grad_phi = (double*)PyArray_DATA(arr_grad_phi); - double *grad_F = (double*)PyArray_DATA(arr_grad_F); - double *S = (double*)PyArray_DATA(arr_S); - double *Z = (double*)PyArray_DATA(arr_Z); - - // Call the C function from libspleaf - spleaf_cholesky_back( - n, - r, - offsetrow, - b, - D, - U, - W, - phi, - G, - grad_D, - grad_Ucho, - grad_W, - grad_phicho, - grad_G, - grad_A, - grad_U, - grad_V, - grad_phi, - grad_F, - S, - Z); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_D); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_grad_D); - Py_XDECREF(arr_grad_Ucho); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phicho); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_A); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_V); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_F); - Py_XDECREF(arr_S); - Py_XDECREF(arr_Z); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_dotL_back(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_x; - PyObject *obj_grad_y; - PyObject *obj_grad_U; - PyObject *obj_grad_W; - PyObject *obj_grad_phi; - PyObject *obj_grad_G; - PyObject *obj_grad_x; - PyObject *obj_f; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_x, - &obj_grad_y, - &obj_grad_U, - &obj_grad_W, - &obj_grad_phi, - &obj_grad_G, - &obj_grad_x, - &obj_f)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_x == NULL || - arr_grad_y == NULL || - arr_grad_U == NULL || - arr_grad_W == NULL || - arr_grad_phi == NULL || - arr_grad_G == NULL || - arr_grad_x == NULL || - arr_f == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_f); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *x = (double*)PyArray_DATA(arr_x); - double *grad_y = (double*)PyArray_DATA(arr_grad_y); - double *grad_U = (double*)PyArray_DATA(arr_grad_U); - double *grad_W = (double*)PyArray_DATA(arr_grad_W); - double *grad_phi = (double*)PyArray_DATA(arr_grad_phi); - double *grad_G = (double*)PyArray_DATA(arr_grad_G); - double *grad_x = (double*)PyArray_DATA(arr_grad_x); - double *f = (double*)PyArray_DATA(arr_f); - - // Call the C function from libspleaf - spleaf_dotL_back( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - x, - grad_y, - grad_U, - grad_W, - grad_phi, - grad_G, - grad_x, - f); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_f); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_solveL_back(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_x; - PyObject *obj_grad_x; - PyObject *obj_grad_U; - PyObject *obj_grad_W; - PyObject *obj_grad_phi; - PyObject *obj_grad_G; - PyObject *obj_grad_y; - PyObject *obj_f; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_x, - &obj_grad_x, - &obj_grad_U, - &obj_grad_W, - &obj_grad_phi, - &obj_grad_G, - &obj_grad_y, - &obj_f)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_x == NULL || - arr_grad_x == NULL || - arr_grad_U == NULL || - arr_grad_W == NULL || - arr_grad_phi == NULL || - arr_grad_G == NULL || - arr_grad_y == NULL || - arr_f == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_f); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *x = (double*)PyArray_DATA(arr_x); - double *grad_x = (double*)PyArray_DATA(arr_grad_x); - double *grad_U = (double*)PyArray_DATA(arr_grad_U); - double *grad_W = (double*)PyArray_DATA(arr_grad_W); - double *grad_phi = (double*)PyArray_DATA(arr_grad_phi); - double *grad_G = (double*)PyArray_DATA(arr_grad_G); - double *grad_y = (double*)PyArray_DATA(arr_grad_y); - double *f = (double*)PyArray_DATA(arr_f); - - // Call the C function from libspleaf - spleaf_solveL_back( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - x, - grad_x, - grad_U, - grad_W, - grad_phi, - grad_G, - grad_y, - f); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_f); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_dotLT_back(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_x; - PyObject *obj_grad_y; - PyObject *obj_grad_U; - PyObject *obj_grad_W; - PyObject *obj_grad_phi; - PyObject *obj_grad_G; - PyObject *obj_grad_x; - PyObject *obj_g; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_x, - &obj_grad_y, - &obj_grad_U, - &obj_grad_W, - &obj_grad_phi, - &obj_grad_G, - &obj_grad_x, - &obj_g)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_x == NULL || - arr_grad_y == NULL || - arr_grad_U == NULL || - arr_grad_W == NULL || - arr_grad_phi == NULL || - arr_grad_G == NULL || - arr_grad_x == NULL || - arr_g == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_g); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *x = (double*)PyArray_DATA(arr_x); - double *grad_y = (double*)PyArray_DATA(arr_grad_y); - double *grad_U = (double*)PyArray_DATA(arr_grad_U); - double *grad_W = (double*)PyArray_DATA(arr_grad_W); - double *grad_phi = (double*)PyArray_DATA(arr_grad_phi); - double *grad_G = (double*)PyArray_DATA(arr_grad_G); - double *grad_x = (double*)PyArray_DATA(arr_grad_x); - double *g = (double*)PyArray_DATA(arr_g); - - // Call the C function from libspleaf - spleaf_dotLT_back( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - x, - grad_y, - grad_U, - grad_W, - grad_phi, - grad_G, - grad_x, - g); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_g); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_solveLT_back(PyObject *self, PyObject *args) -{ - long n; - long r; - PyObject *obj_offsetrow; - PyObject *obj_b; - PyObject *obj_U; - PyObject *obj_W; - PyObject *obj_phi; - PyObject *obj_G; - PyObject *obj_x; - PyObject *obj_grad_x; - PyObject *obj_grad_U; - PyObject *obj_grad_W; - PyObject *obj_grad_phi; - PyObject *obj_grad_G; - PyObject *obj_grad_y; - PyObject *obj_g; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO", - &n, - &r, - &obj_offsetrow, - &obj_b, - &obj_U, - &obj_W, - &obj_phi, - &obj_G, - &obj_x, - &obj_grad_x, - &obj_grad_U, - &obj_grad_W, - &obj_grad_phi, - &obj_grad_G, - &obj_grad_y, - &obj_g)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_offsetrow == NULL || - arr_b == NULL || - arr_U == NULL || - arr_W == NULL || - arr_phi == NULL || - arr_G == NULL || - arr_x == NULL || - arr_grad_x == NULL || - arr_grad_U == NULL || - arr_grad_W == NULL || - arr_grad_phi == NULL || - arr_grad_G == NULL || - arr_grad_y == NULL || - arr_g == NULL) { - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_g); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *offsetrow = (long*)PyArray_DATA(arr_offsetrow); - long *b = (long*)PyArray_DATA(arr_b); - double *U = (double*)PyArray_DATA(arr_U); - double *W = (double*)PyArray_DATA(arr_W); - double *phi = (double*)PyArray_DATA(arr_phi); - double *G = (double*)PyArray_DATA(arr_G); - double *x = (double*)PyArray_DATA(arr_x); - double *grad_x = (double*)PyArray_DATA(arr_grad_x); - double *grad_U = (double*)PyArray_DATA(arr_grad_U); - double *grad_W = (double*)PyArray_DATA(arr_grad_W); - double *grad_phi = (double*)PyArray_DATA(arr_grad_phi); - double *grad_G = (double*)PyArray_DATA(arr_grad_G); - double *grad_y = (double*)PyArray_DATA(arr_grad_y); - double *g = (double*)PyArray_DATA(arr_g); - - // Call the C function from libspleaf - spleaf_solveLT_back( - n, - r, - offsetrow, - b, - U, - W, - phi, - G, - x, - grad_x, - grad_U, - grad_W, - grad_phi, - grad_G, - grad_y, - g); - - // Dereference arrays - Py_XDECREF(arr_offsetrow); - Py_XDECREF(arr_b); - Py_XDECREF(arr_U); - Py_XDECREF(arr_W); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_G); - Py_XDECREF(arr_x); - Py_XDECREF(arr_grad_x); - Py_XDECREF(arr_grad_U); - Py_XDECREF(arr_grad_W); - Py_XDECREF(arr_grad_phi); - Py_XDECREF(arr_grad_G); - Py_XDECREF(arr_grad_y); - Py_XDECREF(arr_g); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_expandsep(PyObject *self, PyObject *args) -{ - long n; - long r; - long rsi; - PyObject *obj_sepindex; - PyObject *obj_U; - PyObject *obj_V; - PyObject *obj_phi; - PyObject *obj_K; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "lllOOOOO", - &n, - &r, - &rsi, - &obj_sepindex, - &obj_U, - &obj_V, - &obj_phi, - &obj_K)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_K = (PyArrayObject*) PyArray_FROM_OTF(obj_K, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_sepindex == NULL || - arr_U == NULL || - arr_V == NULL || - arr_phi == NULL || - arr_K == NULL) { - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_K); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *sepindex = (long*)PyArray_DATA(arr_sepindex); - double *U = (double*)PyArray_DATA(arr_U); - double *V = (double*)PyArray_DATA(arr_V); - double *phi = (double*)PyArray_DATA(arr_phi); - double *K = (double*)PyArray_DATA(arr_K); - - // Call the C function from libspleaf - spleaf_expandsep( - n, - r, - rsi, - sepindex, - U, - V, - phi, - K); - - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_K); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_expandsepmixt(PyObject *self, PyObject *args) -{ - long n1; - long n2; - long r; - long rsi; - PyObject *obj_sepindex; - PyObject *obj_U1; - PyObject *obj_V1; - PyObject *obj_phi1; - PyObject *obj_U2; - PyObject *obj_V2; - PyObject *obj_ref2left; - PyObject *obj_phi2left; - PyObject *obj_phi2right; - PyObject *obj_Km; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llllOOOOOOOOOO", - &n1, - &n2, - &r, - &rsi, - &obj_sepindex, - &obj_U1, - &obj_V1, - &obj_phi1, - &obj_U2, - &obj_V2, - &obj_ref2left, - &obj_phi2left, - &obj_phi2right, - &obj_Km)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U1 = (PyArrayObject*) PyArray_FROM_OTF(obj_U1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V1 = (PyArrayObject*) PyArray_FROM_OTF(obj_V1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi1 = (PyArrayObject*) PyArray_FROM_OTF(obj_phi1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U2 = (PyArrayObject*) PyArray_FROM_OTF(obj_U2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V2 = (PyArrayObject*) PyArray_FROM_OTF(obj_V2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_ref2left = (PyArrayObject*) PyArray_FROM_OTF(obj_ref2left, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi2left = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2left, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi2right = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2right, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_Km = (PyArrayObject*) PyArray_FROM_OTF(obj_Km, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_sepindex == NULL || - arr_U1 == NULL || - arr_V1 == NULL || - arr_phi1 == NULL || - arr_U2 == NULL || - arr_V2 == NULL || - arr_ref2left == NULL || - arr_phi2left == NULL || - arr_phi2right == NULL || - arr_Km == NULL) { - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U1); - Py_XDECREF(arr_V1); - Py_XDECREF(arr_phi1); - Py_XDECREF(arr_U2); - Py_XDECREF(arr_V2); - Py_XDECREF(arr_ref2left); - Py_XDECREF(arr_phi2left); - Py_XDECREF(arr_phi2right); - Py_XDECREF(arr_Km); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *sepindex = (long*)PyArray_DATA(arr_sepindex); - double *U1 = (double*)PyArray_DATA(arr_U1); - double *V1 = (double*)PyArray_DATA(arr_V1); - double *phi1 = (double*)PyArray_DATA(arr_phi1); - double *U2 = (double*)PyArray_DATA(arr_U2); - double *V2 = (double*)PyArray_DATA(arr_V2); - long *ref2left = (long*)PyArray_DATA(arr_ref2left); - double *phi2left = (double*)PyArray_DATA(arr_phi2left); - double *phi2right = (double*)PyArray_DATA(arr_phi2right); - double *Km = (double*)PyArray_DATA(arr_Km); - - // Call the C function from libspleaf - spleaf_expandsepmixt( - n1, - n2, - r, - rsi, - sepindex, - U1, - V1, - phi1, - U2, - V2, - ref2left, - phi2left, - phi2right, - Km); - - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U1); - Py_XDECREF(arr_V1); - Py_XDECREF(arr_phi1); - Py_XDECREF(arr_U2); - Py_XDECREF(arr_V2); - Py_XDECREF(arr_ref2left); - Py_XDECREF(arr_phi2left); - Py_XDECREF(arr_phi2right); - Py_XDECREF(arr_Km); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_expandantisep(PyObject *self, PyObject *args) -{ - long n; - long r; - long rsi; - PyObject *obj_sepindex; - PyObject *obj_U; - PyObject *obj_V; - PyObject *obj_phi; - PyObject *obj_K; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "lllOOOOO", - &n, - &r, - &rsi, - &obj_sepindex, - &obj_U, - &obj_V, - &obj_phi, - &obj_K)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_K = (PyArrayObject*) PyArray_FROM_OTF(obj_K, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_sepindex == NULL || - arr_U == NULL || - arr_V == NULL || - arr_phi == NULL || - arr_K == NULL) { - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_K); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *sepindex = (long*)PyArray_DATA(arr_sepindex); - double *U = (double*)PyArray_DATA(arr_U); - double *V = (double*)PyArray_DATA(arr_V); - double *phi = (double*)PyArray_DATA(arr_phi); - double *K = (double*)PyArray_DATA(arr_K); - - // Call the C function from libspleaf - spleaf_expandantisep( - n, - r, - rsi, - sepindex, - U, - V, - phi, - K); - - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_K); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_dotsep(PyObject *self, PyObject *args) -{ - long n; - long r; - long rsi; - PyObject *obj_sepindex; - PyObject *obj_U; - PyObject *obj_V; - PyObject *obj_phi; - PyObject *obj_x; - PyObject *obj_y; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "lllOOOOOO", - &n, - &r, - &rsi, - &obj_sepindex, - &obj_U, - &obj_V, - &obj_phi, - &obj_x, - &obj_y)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_sepindex == NULL || - arr_U == NULL || - arr_V == NULL || - arr_phi == NULL || - arr_x == NULL || - arr_y == NULL) { - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *sepindex = (long*)PyArray_DATA(arr_sepindex); - double *U = (double*)PyArray_DATA(arr_U); - double *V = (double*)PyArray_DATA(arr_V); - double *phi = (double*)PyArray_DATA(arr_phi); - double *x = (double*)PyArray_DATA(arr_x); - double *y = (double*)PyArray_DATA(arr_y); - - // Call the C function from libspleaf - spleaf_dotsep( - n, - r, - rsi, - sepindex, - U, - V, - phi, - x, - y); - - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_dotsepmixt(PyObject *self, PyObject *args) -{ - long n1; - long n2; - long r; - long rsi; - PyObject *obj_sepindex; - PyObject *obj_U1; - PyObject *obj_V1; - PyObject *obj_phi1; - PyObject *obj_U2; - PyObject *obj_V2; - PyObject *obj_ref2left; - PyObject *obj_phi2left; - PyObject *obj_phi2right; - PyObject *obj_x; - PyObject *obj_y; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "llllOOOOOOOOOOO", - &n1, - &n2, - &r, - &rsi, - &obj_sepindex, - &obj_U1, - &obj_V1, - &obj_phi1, - &obj_U2, - &obj_V2, - &obj_ref2left, - &obj_phi2left, - &obj_phi2right, - &obj_x, - &obj_y)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U1 = (PyArrayObject*) PyArray_FROM_OTF(obj_U1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V1 = (PyArrayObject*) PyArray_FROM_OTF(obj_V1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi1 = (PyArrayObject*) PyArray_FROM_OTF(obj_phi1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U2 = (PyArrayObject*) PyArray_FROM_OTF(obj_U2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V2 = (PyArrayObject*) PyArray_FROM_OTF(obj_V2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_ref2left = (PyArrayObject*) PyArray_FROM_OTF(obj_ref2left, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi2left = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2left, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi2right = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2right, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_sepindex == NULL || - arr_U1 == NULL || - arr_V1 == NULL || - arr_phi1 == NULL || - arr_U2 == NULL || - arr_V2 == NULL || - arr_ref2left == NULL || - arr_phi2left == NULL || - arr_phi2right == NULL || - arr_x == NULL || - arr_y == NULL) { - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U1); - Py_XDECREF(arr_V1); - Py_XDECREF(arr_phi1); - Py_XDECREF(arr_U2); - Py_XDECREF(arr_V2); - Py_XDECREF(arr_ref2left); - Py_XDECREF(arr_phi2left); - Py_XDECREF(arr_phi2right); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *sepindex = (long*)PyArray_DATA(arr_sepindex); - double *U1 = (double*)PyArray_DATA(arr_U1); - double *V1 = (double*)PyArray_DATA(arr_V1); - double *phi1 = (double*)PyArray_DATA(arr_phi1); - double *U2 = (double*)PyArray_DATA(arr_U2); - double *V2 = (double*)PyArray_DATA(arr_V2); - long *ref2left = (long*)PyArray_DATA(arr_ref2left); - double *phi2left = (double*)PyArray_DATA(arr_phi2left); - double *phi2right = (double*)PyArray_DATA(arr_phi2right); - double *x = (double*)PyArray_DATA(arr_x); - double *y = (double*)PyArray_DATA(arr_y); - - // Call the C function from libspleaf - spleaf_dotsepmixt( - n1, - n2, - r, - rsi, - sepindex, - U1, - V1, - phi1, - U2, - V2, - ref2left, - phi2left, - phi2right, - x, - y); - - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U1); - Py_XDECREF(arr_V1); - Py_XDECREF(arr_phi1); - Py_XDECREF(arr_U2); - Py_XDECREF(arr_V2); - Py_XDECREF(arr_ref2left); - Py_XDECREF(arr_phi2left); - Py_XDECREF(arr_phi2right); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - - Py_RETURN_NONE; -} - -static PyObject *libspleaf_spleaf_dotantisep(PyObject *self, PyObject *args) -{ - long n; - long r; - long rsi; - PyObject *obj_sepindex; - PyObject *obj_U; - PyObject *obj_V; - PyObject *obj_phi; - PyObject *obj_x; - PyObject *obj_y; - - // Parse input tuple - if (!PyArg_ParseTuple(args, "lllOOOOOO", - &n, - &r, - &rsi, - &obj_sepindex, - &obj_U, - &obj_V, - &obj_phi, - &obj_x, - &obj_y)) - return(NULL); - - // Interpret input objects as numpy arrays - PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY); - - // Generate exception in case of failure - if ( - arr_sepindex == NULL || - arr_U == NULL || - arr_V == NULL || - arr_phi == NULL || - arr_x == NULL || - arr_y == NULL) { - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - return NULL; - } - - // Get C-types pointers to numpy arrays - long *sepindex = (long*)PyArray_DATA(arr_sepindex); - double *U = (double*)PyArray_DATA(arr_U); - double *V = (double*)PyArray_DATA(arr_V); - double *phi = (double*)PyArray_DATA(arr_phi); - double *x = (double*)PyArray_DATA(arr_x); - double *y = (double*)PyArray_DATA(arr_y); - - // Call the C function from libspleaf - spleaf_dotantisep( - n, - r, - rsi, - sepindex, - U, - V, - phi, - x, - y); - - // Dereference arrays - Py_XDECREF(arr_sepindex); - Py_XDECREF(arr_U); - Py_XDECREF(arr_V); - Py_XDECREF(arr_phi); - Py_XDECREF(arr_x); - Py_XDECREF(arr_y); - - Py_RETURN_NONE; -} diff --git a/kima/vendor/spleaf/spleaf/term.py b/kima/vendor/spleaf/spleaf/term.py deleted file mode 100644 index 35e841d..0000000 --- a/kima/vendor/spleaf/spleaf/term.py +++ /dev/null @@ -1,2016 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2020-2022 Jean-Baptiste Delisle -# -# This file is part of spleaf. -# -# spleaf is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# spleaf is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with spleaf. If not, see . - -__all__ = [ - 'Error', 'Jitter', 'InstrumentJitter', 'CalibrationError', - 'CalibrationJitter', 'ExponentialKernel', 'QuasiperiodicKernel', - 'Matern32Kernel', 'Matern52Kernel', 'SumKernel', 'ProductKernel', - 'USHOKernel', 'OSHOKernel', 'SHOKernel', 'MEPKernel', 'ESKernel', - 'ESPKernel', 'MultiSeriesKernel' -] - -import numpy as np -import warnings - - -class Term: - r""" - Generic class for covariance terms. - """ - - def __init__(self): - self._linked = False - self._param = [] - - def _link(self, cov): - r""" - Link the term to a covariance matrix. - """ - if self._linked: - raise Exception( - 'This term has already been linked to a covariance matrix.') - self._cov = cov - self._linked = True - - def _compute(self): - r""" - Compute the S+LEAF representation of the term. - """ - pass - - def _recompute(self): - r""" - Recompute the S+LEAF representation of the term. - """ - self._compute() - - def _set_param(self): - r""" - Update the term parameters. - """ - pass - - def _get_param(self, par): - r""" - Get the term parameters. - """ - return (self.__dict__[f'_{par}']) - - def _grad_param(self): - r""" - Gradient of a function with respect to the term parameters - (listed in self._param). - """ - return ({}) - - -class Noise(Term): - r""" - Generic class for covariance noise terms. - """ - - def __init__(self): - super().__init__() - self._b = 0 - - -class Kernel(Term): - r""" - Generic class for covariance kernel (Gaussian process) terms. - """ - - def __init__(self): - super().__init__() - self._r = 0 - - def _link(self, cov, offset): - super()._link(cov) - self._offset = offset - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - r""" - Compute the S+LEAF representation of the covariance for a new calendar t2. - """ - - pass - - def _deriv(self, calc_d2=False): - r""" - Compute the S+LEAF representation of the derivative of the GP. - """ - - pass - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - r""" - Compute the S+LEAF representation of the derivative of the GP - for a new calendar t2. - """ - - pass - - def eval(self, dt): - r""" - Evaluate the kernel at lag dt. - """ - - raise NotImplementedError( - 'The eval method should be implemented in Kernel childs.') - - -class Error(Noise): - r""" - Uncorrelated measurement errors. - - Parameters - ---------- - sig : (n,) ndarray - Vector of measurements errobars (std). - """ - - def __init__(self, sig): - super().__init__() - self._sig = sig - - def _compute(self): - self._cov.A += self._sig**2 - - -class Jitter(Noise): - r""" - Uncorrelated global jitter. - - Parameters - ---------- - sig : float - Jitter (std). - """ - - def __init__(self, sig): - super().__init__() - self._sig = sig - self._param = ['sig'] - - def _compute(self): - self._cov.A += self._sig**2 - - def _set_param(self, sig=None): - if sig is not None: - self._sig = sig - - def _grad_param(self): - grad = {} - grad['sig'] = 2 * self._sig * self._cov._sum_grad_A - return (grad) - - -class InstrumentJitter(Noise): - r""" - Uncorrelated instrument jitter. - - Parameters - ---------- - indices : (n,) ndarray or list - Mask or list of indices affected by this jitter. - sig : float - Jitter (std). - """ - - def __init__(self, indices, sig): - super().__init__() - self._indices = indices - self._sig = sig - self._param = ['sig'] - - def _compute(self): - self._cov.A[self._indices] += self._sig**2 - - def _set_param(self, sig=None): - if sig is not None: - self._sig = sig - - def _grad_param(self): - grad = {} - grad['sig'] = 2 * self._sig * np.sum(self._cov._grad_A[self._indices]) - return (grad) - - -class CalibrationError(Noise): - r""" - Correlated calibration error. - - The calibration error is shared by blocks of measurements - using the same calibration. - - Parameters - ---------- - calib_id : (n,) ndarray - Identifier of the calibration used for each measurement. - sig : (n,) ndarray - Calibration error for each measurement (std). - Measurements having the same calib_id should have the same sig. - """ - - def __init__(self, calib_id, sig): - super().__init__() - self._calib_id = calib_id - self._sig = sig - n = calib_id.size - self._b = np.empty(n, dtype=int) - # Find groups of points using same calibration - self._groups = {} - for k in range(n): - if calib_id[k] not in self._groups: - self._groups[calib_id[k]] = [k] - else: - self._groups[calib_id[k]].append(k) - self._b[k] = k - self._groups[calib_id[k]][0] - - def _compute(self): - var = self._sig**2 - self._cov.A += var - for group in self._groups.values(): - for i in range(1, len(group)): - for j in range(i): - self._cov.F[self._cov.offsetrow[group[i]] + - group[j]] += var[group[0]] - - -class CalibrationJitter(Noise): - r""" - Correlated calibration jitter. - - The calibration jitter is shared by blocks of measurements - using the same calibration. - - Parameters - ---------- - indices : (n,) ndarray or list - Mask or list of indices affected by this jitter. - calib_id : (n,) ndarray - Identifier of the calibration used for each measurement. - sig : float - Calibration jitter (std). - """ - - def __init__(self, indices, calib_id, sig): - super().__init__() - self._calib_id = calib_id - self._indices = indices - self._sig = sig - n = calib_id.size - self._b = np.zeros(n, dtype=int) - # Find groups of points using same calibration - self._groups = {} - for k in np.arange(n)[indices]: - if calib_id[k] not in self._groups: - self._groups[calib_id[k]] = [k] - else: - self._groups[calib_id[k]].append(k) - self._b[k] = k - self._groups[calib_id[k]][0] - self._param = ['sig'] - - def _compute(self): - var = self._sig**2 - self._cov.A[self._indices] += var - self._Fmask = [] - for group in self._groups.values(): - for i in range(1, len(group)): - for j in range(i): - self._Fmask.append(self._cov.offsetrow[group[i]] + group[j]) - self._cov.F[self._Fmask] += var - - def _recompute(self): - var = self._sig**2 - self._cov.A[self._indices] += var - self._cov.F[self._Fmask] += var - - def _set_param(self, sig=None): - if sig is not None: - self._sig = sig - - def _grad_param(self): - grad = {} - grad['sig'] = 2 * self._sig * (np.sum(self._cov._grad_A[self._indices]) + - np.sum(self._cov._grad_F[self._Fmask])) - return (grad) - - -class ExponentialKernel(Kernel): - r""" - Exponential decay kernel. - - This kernel follows: - - .. math:: k(\Delta t) = a \mathrm{e}^{-\lambda \Delta t} - - Parameters - ---------- - a : float - Amplitude (variance). - la : float - Decay rate. - """ - - def __init__(self, a, la): - super().__init__() - self._a = a - self._la = la - self._r = 1 - self._param = ['a', 'la'] - - def _compute(self): - self._cov.A += self._a - self._cov.U[:, self._offset] = self._a - self._cov.V[:, self._offset] = 1.0 - self._cov.phi[:, self._offset] = np.exp(-self._la * self._cov.dt) - - def _set_param(self, a=None, la=None): - if a is not None: - self._a = a - if la is not None: - self._la = la - - def _grad_param(self, grad_dU=None, grad_dV=None): - grad = {} - grad['a'] = self._cov._sum_grad_A + np.sum(self._cov._grad_U[:, - self._offset]) - grad['la'] = -np.sum(self._cov.dt * self._cov.phi[:, self._offset] * - self._cov._grad_phi[:, self._offset]) - - if grad_dU is not None: - # self._cov._dU[:, self._offset] = -self._la * self._a - sum_grad_dU = np.sum(grad_dU[:, self._offset]) - grad['a'] -= self._la * sum_grad_dU - grad['la'] -= self._a * sum_grad_dU - - if grad_dV is not None: - # self._cov._dV[:, self._offset] = self._la - grad['la'] += np.sum(grad_dV[:, self._offset]) - - return (grad) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - U2[:, self._offset] = self._a - V2[:, self._offset] = 1.0 - phi2[:, self._offset] = np.exp(-self._la * dt2) - phi2left[:, self._offset] = np.exp(-self._la * dt2left) - phi2right[:, self._offset] = np.exp(-self._la * dt2right) - - def _deriv(self, calc_d2=False): - self._cov._dU[:, self._offset] = -self._la * self._a - if calc_d2: - self._cov._dV[:, self._offset] = self._la - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - dU2[:, self._offset] = -self._la * self._a - V2[:, self._offset] = 1.0 - phi2[:, self._offset] = np.exp(-self._la * dt2) - phi2left[:, self._offset] = np.exp(-self._la * dt2left) - phi2right[:, self._offset] = np.exp(-self._la * dt2right) - if dV2 is not None: - dV2[:, self._offset] = self._la - - def eval(self, dt): - return (self._a * np.exp(-self._la * np.abs(dt))) - - -class QuasiperiodicKernel(Kernel): - r""" - Quasiperiodic kernel. - - This kernel follows: - - .. math:: k(\Delta t) = \mathrm{e}^{-\lambda \Delta t} - \left(a \cos(\nu \Delta t) + b \sin(\nu \Delta t)\right) - - Parameters - ---------- - a, b : float - Amplitudes (variance) of the cos/sin terms. - la : float - Decay rate. - nu : float - Angular frequency. - """ - - def __init__(self, a, b, la, nu): - super().__init__() - self._a = a - self._b = b - self._la = la - self._nu = nu - self._r = 2 - self._param = ['a', 'b', 'la', 'nu'] - - def _compute(self): - self._cov.A += self._a - self._nut = self._nu * self._cov.t - self._cnut = np.cos(self._nut) - self._snut = np.sin(self._nut) - self._cov.U[:, self._offset] = self._a * self._cnut + self._b * self._snut - self._cov.V[:, self._offset] = self._cnut - self._cov.U[:, - self._offset + 1] = self._a * self._snut - self._b * self._cnut - self._cov.V[:, self._offset + 1] = self._snut - self._cov.phi[:, - self._offset:self._offset + 2] = np.exp(-self._la * self._cov.dt)[:, - None] - - def _set_param(self, a=None, b=None, la=None, nu=None): - if a is not None: - self._a = a - if b is not None: - self._b = b - if la is not None: - self._la = la - if nu is not None: - self._nu = nu - - def _grad_param(self, grad_dU=None, grad_dV=None): - grad = {} - grad['a'] = self._cov._sum_grad_A + np.sum(self._cov.V[:, self._offset] * - self._cov._grad_U[:, self._offset] + self._cov.V[:, self._offset + 1] * - self._cov._grad_U[:, self._offset + 1]) - grad['b'] = np.sum(self._cov.V[:, self._offset + 1] * - self._cov._grad_U[:, self._offset] - - self._cov.V[:, self._offset] * self._cov._grad_U[:, self._offset + 1]) - grad['la'] = -np.sum(self._cov.dt * self._cov.phi[:, self._offset] * - (self._cov._grad_phi[:, self._offset] + - self._cov._grad_phi[:, self._offset + 1])) - grad['nu'] = np.sum(self._cov.t * - (self._cov.U[:, self._offset] * self._cov._grad_U[:, self._offset + 1] - - self._cov.U[:, self._offset + 1] * self._cov._grad_U[:, self._offset] + - self._cov.V[:, self._offset] * self._cov._grad_V[:, self._offset + 1] - - self._cov.V[:, self._offset + 1] * self._cov._grad_V[:, self._offset])) - - if grad_dU is not None: - # self._cov._dU[:, self._offset] = da * self._cnut + db * self._snut - # self._cov._dU[:, self._offset + 1] = da * self._snut - db * self._cnut - grad_da = np.sum(self._cnut * grad_dU[:, self._offset] + - self._snut * grad_dU[:, self._offset + 1]) - grad_db = np.sum(self._snut * grad_dU[:, self._offset] - - self._cnut * grad_dU[:, self._offset + 1]) - grad['nu'] += np.sum(self._cov.t * - (self._cov._dU[:, self._offset] * grad_dU[:, self._offset + 1] - - self._cov._dU[:, self._offset + 1] * grad_dU[:, self._offset])) - # da = -self._la * self._a + self._nu * self._b - # db = -self._la * self._b - self._nu * self._a - grad['a'] -= self._la * grad_da + self._nu * grad_db - grad['b'] += self._nu * grad_da - self._la * grad_db - grad['la'] -= self._a * grad_da + self._b * grad_db - grad['nu'] += self._b * grad_da - self._a * grad_db - - if grad_dV is not None: - # self._cov._dV[:, self._offset] = self._la * self._cnut - self._nu * self._snut - # self._cov._dV[:, self._offset + 1] = self._la * self._snut + self._nu * self._cnut - grad['la'] += np.sum(self._cnut * grad_dV[:, self._offset] + - self._snut * grad_dV[:, self._offset + 1]) - latp1 = self._la * self._cov.t + 1 - grad['nu'] += np.sum((latp1 * self._cnut - self._nut * self._snut) * - grad_dV[:, self._offset + 1] - - (self._nut * self._cnut + latp1 * self._snut) * - grad_dV[:, self._offset]) - - return (grad) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - nut2 = self._nu * t2 - cnut2 = np.cos(nut2) - snut2 = np.sin(nut2) - U2[:, self._offset] = self._a * cnut2 + self._b * snut2 - V2[:, self._offset] = cnut2 - U2[:, self._offset + 1] = self._a * snut2 - self._b * cnut2 - V2[:, self._offset + 1] = snut2 - phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None] - phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:, - None] - phi2right[:, - self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None] - - def _deriv(self, calc_d2=False): - da = -self._la * self._a + self._nu * self._b - db = -self._la * self._b - self._nu * self._a - self._cov._dU[:, self._offset] = da * self._cnut + db * self._snut - self._cov._dU[:, self._offset + 1] = da * self._snut - db * self._cnut - if calc_d2: - self._cov._dV[:, - self._offset] = self._la * self._cnut - self._nu * self._snut - self._cov._dV[:, - self._offset + 1] = self._la * self._snut + self._nu * self._cnut - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - da = -self._la * self._a + self._nu * self._b - db = -self._la * self._b - self._nu * self._a - nut2 = self._nu * t2 - cnut2 = np.cos(nut2) - snut2 = np.sin(nut2) - dU2[:, self._offset] = da * cnut2 + db * snut2 - V2[:, self._offset] = cnut2 - dU2[:, self._offset + 1] = da * snut2 - db * cnut2 - V2[:, self._offset + 1] = snut2 - phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None] - phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:, - None] - phi2right[:, - self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None] - if dV2 is not None: - dV2[:, self._offset] = self._la * cnut2 - self._nu * snut2 - dV2[:, self._offset + 1] = self._la * snut2 + self._nu * cnut2 - - def eval(self, dt): - adt = np.abs(dt) - return (np.exp(-self._la * adt) * - (self._a * np.cos(self._nu * adt) + self._b * np.sin(self._nu * adt))) - - -class Matern32Kernel(Kernel): - r""" - Matérn 3/2 kernel. - - .. math:: k(\Delta t) = \sigma^2 \mathrm{e}^{-\sqrt{3}\frac{\Delta t}{\rho}} - \left(1 + \sqrt{3}\frac{\Delta t}{\rho}\right) - - Parameters - ---------- - sig : float - Amplitude (std). - rho : float - Scale. - """ - - def __init__(self, sig, rho): - super().__init__() - self._sig = sig - self._rho = rho - self._r = 2 - self._param = ['sig', 'rho'] - - def _link(self, cov, offset): - super()._link(cov, offset) - self._t0 = (self._cov.t[0] + self._cov.t[-1]) / 2 - self._dt0 = self._cov.t - self._t0 - - def _compute(self): - self._a = self._sig**2 - self._la = np.sqrt(3) / self._rho - self._la2 = self._la**2 - self._x = self._la * self._dt0 - self._1mx = 1 - self._x - self._cov.A += self._a - self._cov.U[:, self._offset] = self._a * self._x - self._cov.V[:, self._offset] = 1.0 - self._cov.U[:, self._offset + 1] = self._a - self._cov.V[:, self._offset + 1] = self._1mx - self._cov.phi[:, - self._offset:self._offset + 2] = np.exp(-self._la * self._cov.dt)[:, - None] - - def _set_param(self, sig=None, rho=None): - if sig is not None: - self._sig = sig - if rho is not None: - self._rho = rho - - def _grad_param(self, grad_dU=None, grad_dV=None): - grad = {} - grad['sig'] = 2 * self._sig * (self._cov._sum_grad_A + - np.sum(self._x * self._cov._grad_U[:, self._offset] + - self._cov._grad_U[:, self._offset + 1])) - grad['rho'] = -1 / self._rho * (np.sum(self._x * - (self._a * self._cov._grad_U[:, self._offset] - - self._cov._grad_V[:, self._offset + 1])) - - self._la * np.sum(self._cov.dt * self._cov.phi[:, self._offset] * - (self._cov._grad_phi[:, self._offset] + - self._cov._grad_phi[:, self._offset + 1]))) - - if grad_dU is not None: - # self._cov._dU[:, self._offset] = self._la * self._a * self._1mx - # self._cov._dU[:, self._offset + 1] = -self._la * self._a - sum_grad_dU = np.sum(self._1mx * grad_dU[:, self._offset] - - grad_dU[:, self._offset + 1]) - grad['sig'] += 2 * self._sig * self._la * sum_grad_dU - grad['rho'] -= self._la / self._rho * self._a * (sum_grad_dU - - np.sum(self._x * grad_dU[:, self._offset])) - - if grad_dV is not None: - # self._cov._dV[:, self._offset] = self._la - # self._cov._dV[:, self._offset + 1] = -self._la * self._x - grad['rho'] -= self._la / self._rho * np.sum(grad_dV[:, self._offset] - - 2 * self._x * grad_dV[:, self._offset + 1]) - - return (grad) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - x2 = self._la * (t2 - self._t0) - U2[:, self._offset] = self._a * x2 - V2[:, self._offset] = 1.0 - U2[:, self._offset + 1] = self._a - V2[:, self._offset + 1] = 1 - x2 - phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None] - phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:, - None] - phi2right[:, - self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None] - - def _deriv(self, calc_d2=False): - self._cov._dU[:, self._offset] = self._la * self._a * self._1mx - self._cov._dU[:, self._offset + 1] = -self._la * self._a - if calc_d2: - self._cov._dV[:, self._offset] = self._la - self._cov._dV[:, self._offset + 1] = -self._la * self._x - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - x2 = self._la * (t2 - self._t0) - onemx2 = 1 - x2 - dU2[:, self._offset] = self._la * self._a * onemx2 - V2[:, self._offset] = 1.0 - dU2[:, self._offset + 1] = -self._la * self._a - V2[:, self._offset + 1] = onemx2 - phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None] - phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:, - None] - phi2right[:, - self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None] - if dV2 is not None: - dV2[:, self._offset] = self._la - dV2[:, self._offset + 1] = -self._la * x2 - - def eval(self, dt): - dx = self._la * np.abs(dt) - return (self._a * np.exp(-dx) * (1 + dx)) - - -class Matern52Kernel(Kernel): - r""" - Matérn 5/2 kernel. - - .. math:: k(\Delta t) = \sigma^2 \mathrm{e}^{-\sqrt{5}\frac{\Delta t}{\rho}} - \left(1 + \sqrt{5}\frac{\Delta t}{\rho} - + \frac{5}{3}\left(\frac{\Delta t}{\rho}\right)^2\right) - - Parameters - ---------- - sig : float - Amplitude (std). - rho : float - Scale. - """ - - def __init__(self, sig, rho): - super().__init__() - self._sig = sig - self._rho = rho - self._r = 3 - self._param = ['sig', 'rho'] - - def _link(self, cov, offset): - super()._link(cov, offset) - self._t0 = (self._cov.t[0] + self._cov.t[-1]) / 2 - self._dt0 = self._cov.t - self._t0 - - def _compute(self): - self._a = self._sig**2 - self._la = np.sqrt(5) / self._rho - self._la2 = self._la**2 - self._x = self._la * self._dt0 - self._x2_3 = self._x * self._x / 3 - self._1mx = 1 - self._x - self._cov.A += self._a - self._cov.U[:, self._offset] = self._a * (self._x + self._x2_3) - self._cov.V[:, self._offset] = 1.0 - self._cov.U[:, self._offset + 1] = self._a - self._cov.V[:, self._offset + 1] = self._1mx + self._x2_3 - self._cov.U[:, self._offset + 2] = self._a * self._x - self._cov.V[:, self._offset + 2] = -2 / 3 * self._x - self._cov.phi[:, - self._offset:self._offset + 3] = np.exp(-self._la * self._cov.dt)[:, - None] - - def _set_param(self, sig=None, rho=None): - if sig is not None: - self._sig = sig - if rho is not None: - self._rho = rho - - def _grad_param(self, grad_dU=None, grad_dV=None): - grad = {} - grad['sig'] = 2 * self._sig * (self._cov._sum_grad_A + - np.sum((self._x + self._x2_3) * self._cov._grad_U[:, self._offset] + - self._cov._grad_U[:, self._offset + 1] + - self._x * self._cov._grad_U[:, self._offset + 2])) - grad['rho'] = -1 / self._rho * (np.sum(self._a * - (self._x + 2 * self._x2_3) * self._cov._grad_U[:, self._offset] + - (2 * self._x2_3 - self._x) * self._cov._grad_V[:, self._offset + 1] + - self._x * (self._a * self._cov._grad_U[:, self._offset + 2] - - 2 / 3 * self._cov._grad_V[:, self._offset + 2])) - - self._la * np.sum(self._cov.dt * self._cov.phi[:, self._offset] * - (self._cov._grad_phi[:, self._offset] + self._cov._grad_phi[:, - self._offset + 1] + self._cov._grad_phi[:, self._offset + 2]))) - - if grad_dU is not None: - # self._cov._dU[:, - # self._offset] = self._la * self._a * (1 - self._x / 3 - self._x2_3) - # self._cov._dU[:, self._offset + 1] = -self._la * self._a - # self._cov._dU[:, self._offset + 2] = self._la * self._1mx * self._a - sum_grad_dU = np.sum((1 - self._x / 3 - self._x2_3) * - grad_dU[:, self._offset] - grad_dU[:, self._offset + 1] + - self._1mx * grad_dU[:, self._offset + 2]) - grad['sig'] += 2 * self._sig * self._la * sum_grad_dU - grad['rho'] -= self._la / self._rho * self._a * (sum_grad_dU - - np.sum((self._x / 3 + 2 * self._x2_3) * grad_dU[:, self._offset] + - self._x * grad_dU[:, self._offset + 2])) - - if grad_dV is not None: - # self._cov._dV[:, self._offset] = self._la - # self._cov._dV[:, self._offset + 1] = -self._la * self._x / 3 * self._1mx - # self._cov._dV[:, self._offset + 2] = -2 / 3 * self._la * (1 + self._x) - grad['rho'] -= self._la / self._rho * np.sum(grad_dV[:, self._offset] + - (3 * self._x2_3 - 2 / 3 * self._x) * grad_dV[:, self._offset + 1] - - 2 / 3 * (1 + 2 * self._x) * grad_dV[:, self._offset + 2]) - - return (grad) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - x2 = self._la * (t2 - self._t0) - x22_3 = x2 * x2 / 3 - U2[:, self._offset] = self._a * (x2 + x22_3) - V2[:, self._offset] = 1.0 - U2[:, self._offset + 1] = self._a - V2[:, self._offset + 1] = 1 - x2 + x22_3 - U2[:, self._offset + 2] = self._a * x2 - V2[:, self._offset + 2] = -2 / 3 * x2 - phi2[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2)[:, None] - phi2left[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2left)[:, - None] - phi2right[:, - self._offset:self._offset + 3] = np.exp(-self._la * dt2right)[:, None] - - def _deriv(self, calc_d2=False): - self._cov._dU[:, - self._offset] = self._la * self._a * (1 - self._x / 3 - self._x2_3) - self._cov._dU[:, self._offset + 1] = -self._la * self._a - self._cov._dU[:, self._offset + 2] = self._la * self._a * self._1mx - if calc_d2: - self._cov._dV[:, self._offset] = self._la - self._cov._dV[:, self._offset + 1] = -self._la * self._x / 3 * self._1mx - self._cov._dV[:, self._offset + 2] = -2 / 3 * self._la * (1 + self._x) - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - x2 = self._la * (t2 - self._t0) - onemx2 = 1 - x2 - x22_3 = x2 * x2 / 3 - dU2[:, self._offset] = self._la * self._a * (1 - x2 / 3 - x22_3) - V2[:, self._offset] = 1.0 - dU2[:, self._offset + 1] = -self._la * self._a - V2[:, self._offset + 1] = onemx2 + x22_3 - dU2[:, self._offset + 2] = self._la * onemx2 * self._a - V2[:, self._offset + 2] = -2 / 3 * x2 - phi2[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2)[:, None] - phi2left[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2left)[:, - None] - phi2right[:, - self._offset:self._offset + 3] = np.exp(-self._la * dt2right)[:, None] - if dV2 is not None: - dV2[:, self._offset] = self._la - dV2[:, self._offset + 1] = -self._la * x2 / 3 * onemx2 - dV2[:, self._offset + 2] = -2 / 3 * self._la * (1 + x2) - - def eval(self, dt): - dx = self._la * np.abs(dt) - return (self._a * np.exp(-dx) * (1 + dx + dx * dx / 3)) - - -class SumKernel(Kernel): - r""" - Generic class for the sum of several kernel terms. - """ - - def __init__(self, *args): - super().__init__() - self._kernels = args - self._r = sum(kernel._r for kernel in self._kernels) - - def _link(self, cov, offset): - super()._link(cov, offset) - off = offset - for kernel in self._kernels: - kernel._link(cov, off) - off += kernel._r - - def _compute(self): - for kernel in self._kernels: - kernel._compute() - - def _kernel_param(self, **kwargs): - raise NotImplementedError( - 'The _kernel_param method should be implemented in SumKernel childs.') - - def _kernel_param_back(self, *args): - raise NotImplementedError( - 'The _kernel_param method should be implemented in SumKernel childs.') - - def _set_param(self, *args, **kwargs): - for karg, arg in enumerate(args): - par = self._param[karg] - if par in kwargs: - raise Exception( - f'SumKernel._set_param: parameter {par} multiply defined.') - kwargs[par] = arg - kernel_param = self._kernel_param(**kwargs) - for kernel, param in zip(self._kernels, kernel_param): - kernel._set_param(**param) - - def _grad_param(self, grad_dU=None, grad_dV=None): - kernel_grad = [ - kernel._grad_param(grad_dU, grad_dV) for kernel in self._kernels - ] - return (self._kernel_param_back(*kernel_grad)) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - for kernel in self._kernels: - kernel._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right) - - def _deriv(self, calc_d2=False): - for kernel in self._kernels: - kernel._deriv(calc_d2) - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - for kernel in self._kernels: - kernel._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right, dV2) - - def eval(self, dt): - return (sum(kernel.eval(dt) for kernel in self._kernels)) - - -class _FakeCov: - - def __init__(self, t, dt, r): - self.t = t - self.dt = dt - self.n = t.size - self.r = r - self.A = np.zeros(self.n) - self.U = np.empty((self.n, r)) - self.V = np.empty((self.n, r)) - self.phi = np.empty((self.n - 1, r)) - - self._dU = np.empty((self.n, r)) - self._dV = np.empty((self.n, r)) - self._B = None - - self._grad_A = np.empty(self.n) - self._grad_U = np.empty((self.n, r)) - self._grad_V = np.empty((self.n, r)) - self._grad_phi = np.empty((self.n - 1, r)) - self._sum_grad_A = None - - self._grad_dU = np.empty((self.n, r)) - self._grad_dV = np.empty((self.n, r)) - self._grad_B = np.empty(self.n) - - -class ProductKernel(Kernel): - r""" - Generic class for the product of two kernel terms. - """ - - def __init__(self, kernel1, kernel2): - super().__init__() - self._kernel1 = kernel1 - self._kernel2 = kernel2 - self._r = self._kernel1._r * self._kernel2._r - - def _link(self, cov, offset): - super()._link(cov, offset) - self._kernel1._link(_FakeCov(cov.t, cov.dt, self._kernel1._r), 0) - self._kernel2._link(_FakeCov(cov.t, cov.dt, self._kernel2._r), 0) - - def _compute(self): - self._kernel1._cov.A[:] = 0 - self._kernel2._cov.A[:] = 0 - self._kernel1._compute() - self._kernel2._compute() - self._cov.A += self._kernel1._cov.A * self._kernel2._cov.A - for k1 in range(self._kernel1._r): - self._cov.U[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = self._kernel1._cov.U[:, k1, - None] * self._kernel2._cov.U - self._cov.V[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = self._kernel1._cov.V[:, k1, - None] * self._kernel2._cov.V - self._cov.phi[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = self._kernel1._cov.phi[:, k1, - None] * self._kernel2._cov.phi - - def _kernel_param(self, **kwargs): - raise NotImplementedError( - 'The _kernel_param method should be implemented in ProductKernel childs.' - ) - - def _kernel_param_back(self, *args): - raise NotImplementedError( - 'The _kernel_param method should be implemented in ProductKernel childs.' - ) - - def _set_param(self, *args, **kwargs): - for karg, arg in enumerate(args): - par = self._param[karg] - if par in kwargs: - raise Exception( - f'ProductKernel._set_param: parameter {par} multiply defined.') - kwargs[par] = arg - kernel1_param, kernel2_param = self._kernel_param(**kwargs) - self._kernel1._set_param(**kernel1_param) - self._kernel2._set_param(**kernel2_param) - - def _grad_param(self, grad_dU=None, grad_dV=None): - self._kernel1._cov._grad_A = self._kernel2._cov.A * self._cov._grad_A - self._kernel2._cov._grad_A = self._kernel1._cov.A * self._cov._grad_A - self._kernel1._cov._sum_grad_A = np.sum(self._kernel1._cov._grad_A) - self._kernel2._cov._sum_grad_A = np.sum(self._kernel2._cov._grad_A) - for k1 in range(self._kernel1._r): - self._kernel1._cov._grad_U[:, - k1] = np.sum(self._kernel2._cov.U * self._cov._grad_U[:, self._offset + - k1 * self._kernel2._r:self._offset + (k1 + 1) * self._kernel2._r], - axis=1) - self._kernel1._cov._grad_V[:, - k1] = np.sum(self._kernel2._cov.V * self._cov._grad_V[:, self._offset + - k1 * self._kernel2._r:self._offset + (k1 + 1) * self._kernel2._r], - axis=1) - self._kernel1._cov._grad_phi[:, - k1] = np.sum(self._kernel2._cov.phi * self._cov._grad_phi[:, - self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r], - axis=1) - if grad_dU is not None: - self._kernel1._cov._grad_U[:, k1] += np.sum(self._kernel2._cov._dU * - grad_dU[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r], - axis=1) - self._kernel1._cov._grad_dU[:, k1] = np.sum(self._kernel2._cov.U * - grad_dU[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r], - axis=1) - if grad_dV is not None: - self._kernel1._cov._grad_V[:, k1] += np.sum(self._kernel2._cov._dV * - grad_dV[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r], - axis=1) - self._kernel1._cov._grad_dV[:, k1] = np.sum(self._kernel2._cov.V * - grad_dV[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r], - axis=1) - - for k2 in range(self._kernel2._r): - self._kernel2._cov._grad_U[:, - k2] = np.sum(self._kernel1._cov.U * self._cov._grad_U[:, - self._offset + k2:self._offset + self._r:self._kernel2._r], - axis=1) - self._kernel2._cov._grad_V[:, - k2] = np.sum(self._kernel1._cov.V * self._cov._grad_V[:, - self._offset + k2:self._offset + self._r:self._kernel2._r], - axis=1) - self._kernel2._cov._grad_phi[:, - k2] = np.sum(self._kernel1._cov.phi * self._cov._grad_phi[:, - self._offset + k2:self._offset + self._r:self._kernel2._r], - axis=1) - if grad_dU is not None: - self._kernel2._cov._grad_U[:, - k2] += np.sum(self._kernel1._cov._dU * grad_dU[:, - self._offset + k2:self._offset + self._r:self._kernel2._r], - axis=1) - self._kernel2._cov._grad_dU[:, - k2] = np.sum(self._kernel1._cov.U * grad_dU[:, - self._offset + k2:self._offset + self._r:self._kernel2._r], - axis=1) - if grad_dV is not None: - self._kernel2._cov._grad_V[:, - k2] += np.sum(self._kernel1._cov._dV * grad_dV[:, - self._offset + k2:self._offset + self._r:self._kernel2._r], - axis=1) - self._kernel2._cov._grad_dV[:, - k2] = np.sum(self._kernel1._cov.V * grad_dV[:, - self._offset + k2:self._offset + self._r:self._kernel2._r], - axis=1) - - kernel1_grad = self._kernel1._grad_param( - self._kernel1._cov._grad_dU if grad_dU is not None else None, - self._kernel1._cov._grad_dV if grad_dV is not None else None) - kernel2_grad = self._kernel2._grad_param( - self._kernel2._cov._grad_dU if grad_dU is not None else None, - self._kernel2._cov._grad_dV if grad_dV is not None else None) - return (self._kernel_param_back(kernel1_grad, kernel2_grad)) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - kernel1_U2 = np.empty((t2.size, self._kernel1._r)) - kernel1_V2 = np.empty((t2.size, self._kernel1._r)) - kernel1_phi2 = np.empty((t2.size - 1, self._kernel1._r)) - kernel1_phi2left = np.empty((t2.size, self._kernel1._r)) - kernel1_phi2right = np.empty((t2.size, self._kernel1._r)) - self._kernel1._compute_t2(t2, dt2, kernel1_U2, kernel1_V2, kernel1_phi2, - ref2left, dt2left, dt2right, kernel1_phi2left, kernel1_phi2right) - - kernel2_U2 = np.empty((t2.size, self._kernel2._r)) - kernel2_V2 = np.empty((t2.size, self._kernel2._r)) - kernel2_phi2 = np.empty((t2.size - 1, self._kernel2._r)) - kernel2_phi2left = np.empty((t2.size, self._kernel2._r)) - kernel2_phi2right = np.empty((t2.size, self._kernel2._r)) - self._kernel2._compute_t2(t2, dt2, kernel2_U2, kernel2_V2, kernel2_phi2, - ref2left, dt2left, dt2right, kernel2_phi2left, kernel2_phi2right) - - for k1 in range(self._kernel1._r): - U2[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = kernel1_U2[:, k1, None] * kernel2_U2 - V2[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = kernel1_V2[:, k1, None] * kernel2_V2 - phi2[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = kernel1_phi2[:, k1, None] * kernel2_phi2 - phi2left[:, - self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) * - self._kernel2._r] = kernel1_phi2left[:, k1, None] * kernel2_phi2left - phi2right[:, - self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) * - self._kernel2._r] = kernel1_phi2right[:, k1, None] * kernel2_phi2right - - def _deriv(self, calc_d2=False): - self._kernel1._deriv(calc_d2) - self._kernel2._deriv(calc_d2) - for k1 in range(self._kernel1._r): - self._cov._dU[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = self._kernel1._cov._dU[:, k1, - None] * self._kernel2._cov.U + self._kernel1._cov.U[:, k1, - None] * self._kernel2._cov._dU - if calc_d2: - self._cov._dV[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = self._kernel1._cov._dV[:, k1, - None] * self._kernel2._cov.V + self._kernel1._cov.V[:, k1, - None] * self._kernel2._cov._dV - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - - kernel1_U2 = np.empty((t2.size, self._kernel1._r)) - kernel1_dU2 = np.empty((t2.size, self._kernel1._r)) - kernel1_V2 = np.empty((t2.size, self._kernel1._r)) - if dV2 is None: - kernel1_dV2 = None - else: - kernel1_dV2 = np.empty((t2.size, self._kernel1._r)) - kernel1_phi2 = np.empty((t2.size - 1, self._kernel1._r)) - kernel1_phi2left = np.empty((t2.size, self._kernel1._r)) - kernel1_phi2right = np.empty((t2.size, self._kernel1._r)) - self._kernel1._compute_t2(t2, dt2, kernel1_U2, kernel1_V2, kernel1_phi2, - ref2left, dt2left, dt2right, kernel1_phi2left, kernel1_phi2right) - self._kernel1._deriv_t2(t2, dt2, kernel1_dU2, kernel1_V2, kernel1_phi2, - ref2left, dt2left, dt2right, kernel1_phi2left, kernel1_phi2right, - kernel1_dV2) - - kernel2_U2 = np.empty((t2.size, self._kernel2._r)) - kernel2_dU2 = np.empty((t2.size, self._kernel2._r)) - kernel2_V2 = np.empty((t2.size, self._kernel2._r)) - if dV2 is None: - kernel2_dV2 = None - else: - kernel2_dV2 = np.empty((t2.size, self._kernel2._r)) - kernel2_phi2 = np.empty((t2.size - 1, self._kernel2._r)) - kernel2_phi2left = np.empty((t2.size, self._kernel2._r)) - kernel2_phi2right = np.empty((t2.size, self._kernel2._r)) - self._kernel2._compute_t2(t2, dt2, kernel2_U2, kernel2_V2, kernel2_phi2, - ref2left, dt2left, dt2right, kernel2_phi2left, kernel2_phi2right) - self._kernel2._deriv_t2(t2, dt2, kernel2_dU2, kernel2_V2, kernel2_phi2, - ref2left, dt2left, dt2right, kernel2_phi2left, kernel2_phi2right, - kernel2_dV2) - - for k1 in range(self._kernel1._r): - dU2[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = kernel1_dU2[:, k1, - None] * kernel2_U2 + kernel1_U2[:, k1, None] * kernel2_dU2 - V2[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = kernel1_V2[:, k1, None] * kernel2_V2 - phi2[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = kernel1_phi2[:, k1, None] * kernel2_phi2 - phi2left[:, - self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) * - self._kernel2._r] = kernel1_phi2left[:, k1, None] * kernel2_phi2left - phi2right[:, - self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) * - self._kernel2._r] = kernel1_phi2right[:, k1, None] * kernel2_phi2right - if dV2 is not None: - dV2[:, self._offset + k1 * self._kernel2._r:self._offset + - (k1 + 1) * self._kernel2._r] = kernel1_dV2[:, k1, - None] * kernel2_V2 + kernel1_V2[:, k1, None] * kernel2_dV2 - - def eval(self, dt): - return (self._kernel1.eval(dt) * self._kernel2.eval(dt)) - - -class USHOKernel(QuasiperiodicKernel): - r""" - Under-damped SHO Kernel. - - This kernel follows the differential equation of - a stochastically-driven harmonic oscillator (SHO) - in the under-damped case (:math:`Q>0.5`). - See `Foreman-Mackey et al. 2017 `_) - for more details. - - Parameters - ---------- - sig : float - Amplitude (std). - P0 : float - Undamped period. - Q : float - Quality factor. - eps : float - Regularization parameter (1e-5 by default). - """ - - def __init__(self, sig, P0, Q, eps=1e-5): - self._sig = sig - self._P0 = P0 - self._Q = Q - self._eps = eps - super().__init__(*self._getcoefs()) - self._param = ['sig', 'P0', 'Q'] - - def _getcoefs(self): - self._sqQ = np.sqrt(max(4 * self._Q**2 - 1, self._eps)) - a = self._sig**2 - la = np.pi / (self._P0 * self._Q) - b = a / self._sqQ - nu = la * self._sqQ - return (a, b, la, nu) - - def _set_param(self, sig=None, P0=None, Q=None): - if sig is not None: - self._sig = sig - if P0 is not None: - self._P0 = P0 - if Q is not None: - self._Q = Q - a, b, la, nu = self._getcoefs() - super()._set_param(a, b, la, nu) - - def _grad_param(self, grad_dU=None, grad_dV=None): - gradQP = super()._grad_param(grad_dU, grad_dV) - grad = {} - grad['sig'] = 2 * self._sig * (gradQP['a'] + gradQP['b'] / self._sqQ) - grad['P0'] = -np.pi / (self._P0**2 * self._Q) * (gradQP['la'] + - gradQP['nu'] * self._sqQ) - grad['Q'] = -np.pi / (self._P0 * self._Q**2) * (gradQP['la'] + - gradQP['nu'] * self._sqQ) - if 4 * self._Q**2 - 1 > self._eps: - grad['Q'] += 4 * self._Q / self._sqQ * (gradQP['nu'] * self._la - - gradQP['b'] * self._a / self._sqQ**2) - return (grad) - - -class OSHOKernel(SumKernel): - r""" - Over-damped SHO Kernel. - - This kernel follows the differential equation of - a stochastically-driven harmonic oscillator (SHO) - in the over-damped case (:math:`Q<0.5`). - See `Foreman-Mackey et al. 2017 `_) - for more details. - - Parameters - ---------- - sig : float - Amplitude (std). - P0 : float - Undamped period. - Q : float - Quality factor. - eps : float - Regularization parameter (1e-5 by default). - """ - - def __init__(self, sig, P0, Q, eps=1e-5): - self._sig = sig - self._P0 = P0 - self._Q = Q - self._eps = eps - a1, la1, a2, la2 = self._getcoefs() - self._exp1 = ExponentialKernel(a1, la1) - self._exp2 = ExponentialKernel(a2, la2) - super().__init__(self._exp1, self._exp2) - self._param = ['sig', 'P0', 'Q'] - - def _getcoefs(self): - self._sqQ = np.sqrt(max(1 - 4 * self._Q**2, self._eps)) - self._a = self._sig**2 - self._la = np.pi / (self._P0 * self._Q) - return (self._a * (1 + 1 / self._sqQ) / 2, self._la * (1 - self._sqQ), - self._a * (1 - 1 / self._sqQ) / 2, self._la * (1 + self._sqQ)) - - def _kernel_param(self, sig=None, P0=None, Q=None): - if sig is not None: - self._sig = sig - if P0 is not None: - self._P0 = P0 - if Q is not None: - self._Q = Q - a1, la1, a2, la2 = self._getcoefs() - return (dict(a=a1, la=la1), dict(a=a2, la=la2)) - - def _kernel_param_back(self, gradExp1, gradExp2): - grad = {} - grad['sig'] = 2 * self._sig * (gradExp1['a'] * - (1 + 1 / self._sqQ) / 2 + gradExp2['a'] * (1 - 1 / self._sqQ) / 2) - grad['P0'] = -np.pi / (self._P0**2 * self._Q) * (gradExp1['la'] * - (1 - self._sqQ) + gradExp2['la'] * (1 + self._sqQ)) - grad['Q'] = -np.pi / (self._P0 * self._Q**2) * (gradExp1['la'] * - (1 - self._sqQ) + gradExp2['la'] * (1 + self._sqQ)) - if 1 - 4 * self._Q**2 > self._eps: - grad['Q'] -= 4 * self._Q / self._sqQ * ( - (gradExp2['a'] - gradExp1['a']) * self._a / (2 * self._sqQ**2) + - (gradExp2['la'] - gradExp1['la']) * self._la) - return (grad) - - -class SHOKernel(Kernel): - r""" - SHO Kernel. - - This kernel follows the differential equation of - a stochastically-driven harmonic oscillator (SHO). - It merges the under-damped (:math:`Q>0.5`) :class:`USHOKernel` - and the over-damped (:math:`Q<0.5`) :class:`OSHOKernel`. - See `Foreman-Mackey et al. 2017 `_) - for more details. - - Parameters - ---------- - sig : float - Amplitude (std). - P0 : float - Undamped period. - Q : float - Quality factor. - eps : float - Regularization parameter (1e-5 by default). - """ - - def __init__(self, sig, P0, Q, eps=1e-5): - super().__init__() - self._sig = sig - self._P0 = P0 - self._Q = Q - self._eps = eps - self._usho = USHOKernel(sig, P0, Q, eps) - self._osho = OSHOKernel(sig, P0, Q, eps) - self._r = 2 - self._param = ['sig', 'P0', 'Q'] - - def _link(self, cov, offset): - super()._link(cov, offset) - self._usho._link(cov, offset) - self._osho._link(cov, offset) - - def _compute(self): - if self._Q > 0.5: - self._usho._compute() - else: - self._osho._compute() - - def _set_param(self, sig=None, P0=None, Q=None): - if sig is not None: - self._sig = sig - if P0 is not None: - self._P0 = P0 - if Q is not None: - self._Q = Q - if self._Q > 0.5: - self._usho._set_param(self._sig, self._P0, self._Q) - else: - self._osho._set_param(self._sig, self._P0, self._Q) - - def _grad_param(self, grad_dU=None, grad_dV=None): - if self._Q > 0.5: - return (self._usho._grad_param(grad_dU, grad_dV)) - else: - return (self._osho._grad_param(grad_dU, grad_dV)) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - if self._Q > 0.5: - self._usho._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left, - dt2right, phi2left, phi2right) - else: - self._osho._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left, - dt2right, phi2left, phi2right) - - def _deriv(self, calc_d2=False): - if self._Q > 0.5: - self._usho._deriv(calc_d2) - else: - self._osho._deriv(calc_d2) - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - if self._Q > 0.5: - self._usho._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right, dV2) - else: - self._osho._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right, dV2) - - def eval(self, dt): - if self._Q > 0.5: - return (self._usho.eval(dt)) - else: - return (self._osho.eval(dt)) - - -class MEPKernel(SumKernel): - r""" - The Matérn 3/2 exponential periodic (MEP) kernel - is a rank 6 kernel roughly approximating - the squared-exponential periodic (SEP) kernel. - - The exact SEP kernel is written as - - .. math:: k(\Delta t) = \sigma^2 \exp \left(- \frac{\Delta t^2}{2 \rho^2} - - \frac{\sin^2 \left( \frac{\pi \Delta t }{P}\right) }{2 \eta^2}\right), - - while the MEP kernel approximates it with - - .. math:: k(\Delta t) = \sigma^2\frac{k_{3/2}(\Delta t) - + f k_{\mathrm{SHO,\,fund.}}(\Delta t) - + \frac{f^2}{4} k_{\mathrm{SHO,\,harm.}}(\Delta t)}{1+f+\frac{f^2}{4}}, - - where - - .. math:: - \begin{align} - \nu &= \frac{2\pi}{P},\\ - f &= \frac{1}{4\eta^2},\\ - k_{3/2}(\Delta t) &= \exp\left(-\frac{\sqrt{3}\Delta t}{\rho}\right) - \left(1+\frac{\sqrt{3}\Delta t}{\rho}\right),\\ - k_{\mathrm{SHO,\,fund.}}(\Delta t) &= \exp\left(-\frac{\Delta t}{\rho}\right) - \left(\cos\left(\nu \Delta t\right) - +\frac{1}{\nu\rho}\sin\left(\nu \Delta t\right)\right),\\ - k_{\mathrm{SHO,\,harm.}}(\Delta t) &= \exp\left(-\frac{\Delta t}{\rho}\right) - \left(\cos\left(2\nu \Delta t\right) - +\frac{1}{2\nu\rho}\sin\left(2\nu \Delta t\right)\right). - \end{align} - - Parameters - ---------- - sig : float - Amplitude (std). - P : float - Period. - rho : float - Scale. - eta : float - Scale of oscillations. - """ - - def __init__(self, sig, P, rho, eta): - self._sig = sig - self._P = P - self._rho = rho - self._eta = eta - sig0, a1, a2, b1, b2, la, nu = self._getcoefs() - self._mat = Matern32Kernel(sig0, self._rho) - self._qp1 = QuasiperiodicKernel(a1, b1, la, nu) - self._qp2 = QuasiperiodicKernel(a2, b2, la, 2 * nu) - super().__init__(self._mat, self._qp1, self._qp2) - self._param = ['sig', 'P', 'rho', 'eta'] - - def _getcoefs(self): - la = 1 / self._rho - self._var = self._sig * self._sig - self._eta2 = self._eta * self._eta - self._f = 1 / (4 * self._eta2) - self._f2 = self._f * self._f - self._f2_4 = self._f2 / 4 - self._deno = 1 + self._f + self._f2_4 - a0 = self._var / self._deno - sig0 = np.sqrt(a0) - a1 = self._f * a0 - a2 = self._f2_4 * a0 - nu = 2 * np.pi / self._P - la_nu = la / nu - b1 = a1 * la_nu - b2 = a2 * la_nu / 2 - return (sig0, a1, a2, b1, b2, la, nu) - - def _kernel_param(self, sig=None, P=None, rho=None, eta=None): - if sig is not None: - self._sig = sig - if P is not None: - self._P = P - if rho is not None: - self._rho = rho - if eta is not None: - self._eta = eta - sig0, a1, a2, b1, b2, la, nu = self._getcoefs() - return (dict(sig=sig0, rho=self._rho), dict(a=a1, b=b1, la=la, - nu=nu), dict(a=a2, b=b2, la=la, nu=2 * nu)) - - def _kernel_param_back(self, gradMat, gradQP1, gradQP2): - sgs0 = self._mat._sig * gradMat['sig'] - aga1 = self._qp1._a * gradQP1['a'] - aga2 = self._qp2._a * gradQP2['a'] - bgb1 = self._qp1._b * gradQP1['b'] - bgb2 = self._qp2._b * gradQP2['b'] - bgb = bgb1 + bgb2 - sgs = sgs0 + 2 * (aga1 + aga2 + bgb) - - grad = {} - grad['sig'] = sgs / self._sig - grad['P'] = (bgb - self._qp1._nu * gradQP1['nu'] - - self._qp2._nu * gradQP2['nu']) / self._P - grad['rho'] = gradMat['rho'] - (bgb + self._qp1._la * - (gradQP1['la'] + gradQP2['la'])) / self._rho - grad['eta'] = (sgs * (self._f + self._f2 / 2) / self._deno - 2 * - (aga1 + bgb1 + 2 * (aga2 + bgb2))) / self._eta - return (grad) - - -class ESKernel(SumKernel): - r""" - The Exponential-sine (ES) kernel is a rank 3 - twice mean-square differentiable kernel - approximating the squared-exponential (SE) kernel. - - The exact SE kernel is written as - - .. math:: k(\Delta t) = \sigma^2 \exp\left(-\frac{1}{2} - \left(\frac{\Delta t}{\rho}\right)^2\right), - - while the ES kernel approximates it with - - .. math:: k(\Delta t) = \sigma^2 \exp\left(-\lambda \Delta t\right) - \left(1 + \frac{1-2\mu^{-2}}{3} \left(\cos(\mu\lambda\Delta t) - 1\right) - + \mu^{-1}\sin(\mu\lambda\Delta t)\right), - - with :math:`\lambda = \frac{c_\lambda}{\rho}`. - - Parameters - ---------- - sig : float - Amplitude (std). - rho : float - Scale. - coef_la : float - Coefficient :math:`c_\lambda`. - The default value is chosen such as the deviation - from the SE kernel is below 0.9%. - mu : float - Coefficient :math:`\mu`. - The default value is chosen such as the deviation - from the SE kernel is below 0.9%. - """ - - def __init__(self, - sig, - rho, - coef_la=1.0907260149419182, - mu=1.326644517327145): - - self._sig = sig - self._rho = rho - - self._coef_la = coef_la - self._mu = mu - self._coef_b = 1 / self._mu - self._coef_a0 = 2 / 3 * (1 + self._coef_b**2) - self._coef_a = 1 - self._coef_a0 - - a0, a, b, la, nu = self._getcoefs() - self._exp = ExponentialKernel(a0, la) - self._qp = QuasiperiodicKernel(a, b, la, nu) - super().__init__(self._exp, self._qp) - self._param = ['sig', 'rho'] - - def _getcoefs(self): - la = self._coef_la / self._rho - nu = self._mu * la - var = self._sig * self._sig - a0 = self._coef_a0 * var - a = self._coef_a * var - b = self._coef_b * var - return (a0, a, b, la, nu) - - def _kernel_param(self, sig=None, rho=None): - if sig is not None: - self._sig = sig - if rho is not None: - self._rho = rho - a0, a, b, la, nu = self._getcoefs() - return (dict(a=a0, la=la), dict(a=a, b=b, la=la, nu=nu)) - - def _kernel_param_back(self, gradExp, gradQP): - grad = {} - grad['sig'] = 2 / self._sig * (gradExp['a'] * self._exp._a + - gradQP['a'] * self._qp._a + gradQP['b'] * self._qp._b) - grad['rho'] = -self._exp._la / self._rho * (gradExp['la'] + gradQP['la'] + - self._mu * gradQP['nu']) - return (grad) - - -class _ESP_PKernel(SumKernel): - r""" - Periodic part of the :class:`ESPKernel`. - - Warnings - -------- - This is not a valid kernel on its own. - """ - - def __init__(self, P, eta): - self._P = P - self._eta = eta - a0, a1, a2, nu = self._getcoefs() - self._exp = ExponentialKernel(a0, 0) - self._qp1 = QuasiperiodicKernel(a1, 0, 0, nu) - self._qp2 = QuasiperiodicKernel(a2, 0, 0, 2 * nu) - super().__init__(self._exp, self._qp1, self._qp2) - self._param = ['P', 'eta'] - - def _getcoefs(self): - self._eta2 = self._eta * self._eta - self._f = 1 / (4 * self._eta2) - self._f2 = self._f * self._f - self._f2_4 = self._f2 / 4 - self._deno = 1 + self._f + self._f2_4 - a0 = 1 / self._deno - a1 = self._f * a0 - a2 = self._f2_4 * a0 - nu = 2 * np.pi / self._P - return (a0, a1, a2, nu) - - def _kernel_param(self, P=None, eta=None): - if P is not None: - self._P = P - if eta is not None: - self._eta = eta - a0, a1, a2, nu = self._getcoefs() - return (dict(a=a0), dict(a=a1, nu=nu), dict(a=a2, nu=2 * nu)) - - def _kernel_param_back(self, gradExp, gradQP1, gradQP2): - grad = {} - aga0 = self._exp._a * gradExp['a'] - aga1 = self._qp1._a * gradQP1['a'] - aga2 = self._qp2._a * gradQP2['a'] - sgs = 2 * (aga0 + aga1 + aga2) - grad['P'] = -(self._qp1._nu * gradQP1['nu'] + - self._qp2._nu * gradQP2['nu']) / self._P - grad['eta'] = (sgs * (self._f + self._f2 / 2) / self._deno - 2 * - (aga1 + 2 * aga2)) / self._eta - return (grad) - - -class ESPKernel(ProductKernel): - r""" - The Exponential-sine periodic (ESP) kernel is a rank 15 - twice mean-square differentiable kernel - approximating the squared-exponential periodic (SEP) kernel. - - The exact SEP kernel is written as - - .. math:: k(\Delta t) = \sigma^2 \exp \left(- \frac{\Delta t^2}{2 \rho^2} - - \frac{\sin^2 \left( \frac{\pi \Delta t }{P}\right) }{2 \eta^2}\right), - - while the ESP kernel approximates it with - - .. math:: k(\Delta t) = \sigma^2 k_\mathrm{ES}(\rho;\Delta t) - \frac{1 + f\cos\left(\nu \Delta t\right) - + \frac{f^2}{4} \cos\left(2\nu\Delta t\right)}{1+f+\frac{f^2}{4}}, - - where :math:`\nu = \frac{2\pi}{P}`, :math:`f = \frac{1}{4\eta^2}`, - and :math:`k_\mathrm{ES}` is an :class:`ESKernel` with scale :math:`\rho`. - - Parameters - ---------- - sig : float - Amplitude (std). - P : float - Period. - rho : float - Scale. - eta : float - Scale of oscillations. - """ - - def __init__(self, sig, P, rho, eta): - self._sig = sig - self._P = P - self._rho = rho - self._eta = eta - super().__init__(ESKernel(sig, rho), _ESP_PKernel(P, eta)) - self._param = ['sig', 'P', 'rho', 'eta'] - - def _kernel_param(self, sig=None, P=None, rho=None, eta=None): - if sig is not None: - self._sig = sig - if P is not None: - self._P = P - if rho is not None: - self._rho = rho - if eta is not None: - self._eta = eta - return (dict(sig=sig, rho=rho), dict(P=P, eta=eta)) - - def _kernel_param_back(self, gradES, gradP): - return ({**gradES, **gradP}) - - -class MultiSeriesKernel(Kernel): - r""" - Linear combination of a Kernel and its derivative - applied to heterogenous time series. - - This kernel allows to model efficiently - several (heterogeneous) time series (:math:`y_i`) - which depend on different linear combinations - of the same GP (:math:`G`) - and its derivative (:math:`G'`): - - .. math:: y_{i,j} = \alpha_i G(t_{i,j}) + \beta_i G'(t_{i,j}). - - The times of measurements need not be the same for each time series - (i.e. we may have :math:`t_{i,.} \neq t_{j,.}`). - - This allows to define models similar to - `Rajpaul et al. (2015) `_ - but with fast and scalable algorithms. - - Parameters - ---------- - kernel : Kernel - Kernel of the GP (:math:`G`). - series_index : list of ndarrays - Indices corresponding to each original time series in the merged time series. - alpha : list - Coefficients in front of the GP for each original time series. - beta : list or None - Coefficients in front of the GP derivative for each original time series. - If None, the derivative is ignored. - """ - - def __init__(self, kernel, series_index, alpha, beta=None): - super().__init__() - self._kernel = kernel - self._series_index = series_index - self._nseries = len(series_index) - self._param = kernel._param + [f'alpha_{k}' for k in range(self._nseries)] - self._alpha = alpha - self._beta = beta - if beta is None: - self._with_derivative = False - else: - self._with_derivative = True - self._param += [f'beta_{k}' for k in range(self._nseries)] - self._r = kernel._r - - self._cond_alpha = 1 - self._cond_beta = 0 - self._cond_series_id = None - - def _link(self, cov, offset): - super()._link(cov, offset) - self._kernel._link(_FakeCov(cov.t, cov.dt, self._r), 0) - - def _compute(self): - self._kernel._cov.A[:] = 0 - self._kernel._compute() - if self._with_derivative: - self._kernel._deriv(True) - self._kernel._cov._B = np.sum(self._kernel._cov._dU * - self._kernel._cov._dV, - axis=1) - for k in range(self._nseries): - ik = self._series_index[k] - # cov(GP, GP) - self._cov.A[ik] += self._alpha[k]**2 * self._kernel._cov.A[ik] - self._cov.U[ik, self._offset:self._offset + - self._r] = self._alpha[k] * self._kernel._cov.U[ik] - self._cov.V[ik, self._offset:self._offset + - self._r] = self._alpha[k] * self._kernel._cov.V[ik] - if self._with_derivative: - # cov(GP, dGP), cov(dGP, GP), cov(dGP, dGP) - self._cov.A[ik] += self._beta[k]**2 * self._kernel._cov._B[ik] - self._cov.U[ik, self._offset:self._offset + - self._r] += self._beta[k] * self._kernel._cov._dU[ik] - self._cov.V[ik, self._offset:self._offset + - self._r] += self._beta[k] * self._kernel._cov._dV[ik] - self._cov.phi[:, - self._offset:self._offset + self._r] = self._kernel._cov.phi - - def _set_param(self, *args, **kwargs): - for karg, arg in enumerate(args): - par = self._param[karg] - if par in kwargs: - raise Exception( - f'MultiSeriesKernel._set_param: parameter {par} multiply defined.') - kwargs[par] = arg - kernel_kwargs = {} - for par in kwargs: - if par.startswith('alpha_'): - self._alpha[int(par.replace('alpha_', ''))] = kwargs[par] - elif par.startswith('beta_'): - self._beta[int(par.replace('beta_', ''))] = kwargs[par] - else: - kernel_kwargs[par] = kwargs[par] - self._kernel._set_param(**kernel_kwargs) - - def _get_param(self, par): - if par.startswith('alpha_'): - return (self._alpha[int(par.replace('alpha_', ''))]) - elif par.startswith('beta_'): - return (self._beta[int(par.replace('beta_', ''))]) - else: - return (self._kernel._get_param(par)) - - def _grad_param(self): - grad = {} - for k in range(self._nseries): - ik = self._series_index[k] - # cov(GP, GP) - grad[f'alpha_{k}'] = 2 * self._alpha[k] * np.sum( - self._cov._grad_A[ik] * self._kernel._cov.A[ik]) - grad[f'alpha_{k}'] += np.sum(self._cov._grad_U[ik, - self._offset:self._offset + self._r] * self._kernel._cov.U[ik] + - self._cov._grad_V[ik, self._offset:self._offset + self._r] * - self._kernel._cov.V[ik]) - self._kernel._cov._grad_A[ik] = self._alpha[k]**2 * self._cov._grad_A[ik] - self._kernel._cov._grad_U[ik] = self._alpha[k] * self._cov._grad_U[ik, - self._offset:self._offset + self._r] - self._kernel._cov._grad_V[ik] = self._alpha[k] * self._cov._grad_V[ik, - self._offset:self._offset + self._r] - if self._with_derivative: - # cov(GP, dGP), cov(dGP, GP), cov(dGP, dGP) - grad[f'beta_{k}'] = 2 * self._beta[k] * np.sum( - self._cov._grad_A[ik] * self._kernel._cov._B[ik]) - grad[f'beta_{k}'] += np.sum(self._cov._grad_U[ik, - self._offset:self._offset + self._r] * self._kernel._cov._dU[ik] + - self._cov._grad_V[ik, self._offset:self._offset + self._r] * - self._kernel._cov._dV[ik]) - self._kernel._cov._grad_B[ - ik] = self._beta[k]**2 * self._cov._grad_A[ik] - self._kernel._cov._grad_dU[ik] = self._beta[k] * self._cov._grad_U[ik, - self._offset:self._offset + self._r] - self._kernel._cov._grad_dV[ik] = self._beta[k] * self._cov._grad_V[ik, - self._offset:self._offset + self._r] - self._kernel._cov._grad_phi = self._cov._grad_phi[:, - self._offset:self._offset + self._r] - - self._kernel._cov._sum_grad_A = np.sum(self._kernel._cov._grad_A) - if self._with_derivative: - self._kernel._cov._grad_dU += self._kernel._cov._dV * self._kernel._cov._grad_B[:, - None] - self._kernel._cov._grad_dV += self._kernel._cov._dU * self._kernel._cov._grad_B[:, - None] - grad.update( - self._kernel._grad_param(self._kernel._cov._grad_dU, - self._kernel._cov._grad_dV)) - else: - grad.update(self._kernel._grad_param()) - - return (grad) - - def set_conditional_coef(self, alpha=1, beta=0, series_id=None): - r""" - Set the coefficients used for the conditional computations. - - Parameters - ---------- - alpha : float - Amplitude in front of the GP. - This is only used if series_id is None. - beta : float - Amplitude in front of the GP derivative. - This is only used if series_id is None. - series_id : int - Use the coefficents corresponding to a given time series. - """ - - self._cond_series_id = series_id - if series_id is None: - self._cond_alpha = alpha - self._cond_beta = beta - else: - self._cond_alpha = None - self._cond_beta = None - - def set_conditionnal_coef(self, *args, **kwargs): - r""" - Same as the :func:`set_conditional_coef` method (here for backward-compatibility). - """ - - warnings.warn( - "Please use the set_conditional_coef method (with a single n).", - DeprecationWarning) - self.set_conditional_coef(*args, **kwargs) - - def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right, - phi2left, phi2right): - - if self._cond_series_id is None: - alpha = self._cond_alpha - if self._with_derivative: - beta = self._cond_beta - else: - alpha = self._alpha[self._cond_series_id] - if self._with_derivative: - beta = self._beta[self._cond_series_id] - - kernel_U2 = np.empty((t2.size, self._r)) - kernel_V2 = np.empty((t2.size, self._r)) - kernel_phi2 = np.empty((t2.size - 1, self._r)) - kernel_phi2left = np.empty((t2.size, self._r)) - kernel_phi2right = np.empty((t2.size, self._r)) - self._kernel._compute_t2(t2, dt2, kernel_U2, kernel_V2, kernel_phi2, - ref2left, dt2left, dt2right, kernel_phi2left, kernel_phi2right) - # cov(GP, GP) - U2[:, self._offset:self._offset + self._r] = alpha * kernel_U2 - V2[:, self._offset:self._offset + self._r] = alpha * kernel_V2 - phi2[:, self._offset:self._offset + self._r] = kernel_phi2 - phi2left[:, self._offset:self._offset + self._r] = kernel_phi2left - phi2right[:, self._offset:self._offset + self._r] = kernel_phi2right - - if self._with_derivative and beta != 0: - kernel_dU2 = np.empty((t2.size, self._r)) - kernel_dV2 = np.empty((t2.size, self._r)) - self._kernel._deriv_t2(t2, dt2, kernel_dU2, kernel_V2, kernel_phi2, - ref2left, dt2left, dt2right, kernel_phi2left, kernel_phi2right, - kernel_dV2) - # cov(GP, dGP), cov(dGP, GP), cov(dGP, dGP) - U2[:, self._offset:self._offset + self._r] += beta * kernel_dU2 - V2[:, self._offset:self._offset + self._r] += beta * kernel_dV2 - - def _deriv(self, calc_d2=False): - if self._with_derivative: - raise NotImplementedError - else: - self._kernel._deriv(calc_d2) - for k in range(self._nseries): - ik = self._series_index[k] - self._cov._dU[ik, self._offset:self._offset + - self._r] = self._alpha[k] * self._kernel._cov._dU - if calc_d2: - self._cov._dV[ik, self._offset:self._offset + - self._r] = self._alpha[k] * self._kernel._cov._dV - - def _deriv_t2(self, - t2, - dt2, - dU2, - V2, - phi2, - ref2left, - dt2left, - dt2right, - phi2left, - phi2right, - dV2=None): - - if self._with_derivative: - raise NotImplementedError - else: - if self._cond_series_id is None: - alpha = self._cond_alpha - else: - alpha = self._alpha[self._cond_series_id] - kernel_dU2 = np.empty((t2.size, self._r)) - kernel_V2 = np.empty((t2.size, self._r)) - kernel_phi2 = np.empty((t2.size - 1, self._r)) - kernel_phi2left = np.empty((t2.size, self._r)) - kernel_phi2right = np.empty((t2.size, self._r)) - if dV2 is None: - kernel_dV2 = None - else: - kernel_dV2 = np.empty((t2.size, self._r)) - self._kernel._deriv_t2(t2, dt2, kernel_dU2, kernel_V2, kernel_phi2, - ref2left, dt2left, dt2right, kernel_phi2left, kernel_phi2right, - kernel_dV2) - dU2[:, self._offset:self._offset + self._r] = alpha * kernel_dU2 - V2[:, self._offset:self._offset + self._r] = alpha * kernel_V2 - if dV2 is not None: - dV2[:, self._offset:self._offset + self._r] = alpha * kernel_dV2 - - phi2[:, self._offset:self._offset + self._r] = kernel_phi2 - phi2left[:, self._offset:self._offset + self._r] = kernel_phi2left - phi2right[:, self._offset:self._offset + self._r] = kernel_phi2right - - def eval(self, dt): - return (self._kernel.eval(dt)) diff --git a/kima/vendor/spleaf/spleaf_env.yml b/kima/vendor/spleaf/spleaf_env.yml deleted file mode 100644 index d389b2e..0000000 --- a/kima/vendor/spleaf/spleaf_env.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: spleaf -channels: - - conda-forge -dependencies: - - python>=3.6 - - numpy>=1.16 - - pytest - - sphinx - - numpydoc - - matplotlib - - scipy - - twine diff --git a/kima/vendor/spleaf/test/test_cov.py b/kima/vendor/spleaf/test/test_cov.py deleted file mode 100644 index bdbc62c..0000000 --- a/kima/vendor/spleaf/test/test_cov.py +++ /dev/null @@ -1,844 +0,0 @@ -import pytest -import numpy as np -from spleaf.cov import Cov -from spleaf.term import * - -prec = 1e-12 -n = 143 -ninst = 3 -calibmax = 12 -calibprob = 0.8 -nexp = 1 -nqper = 1 -nmat32 = 1 -nmat52 = 1 -nes = 1 -nusho = 1 -nosho = 1 -nsho = 1 -nmep = 1 -nesp = 1 -delta = 1e-6 -coef_delta = -1.3 -coef_num_err = 10 - - -def _grad1d(x, f, k, deltaxk0, deltafmin, deltafmax, maxiter, absolute, args): - xb = x.copy() - deltaxk = deltaxk0 - fx = f(x, *args) - if absolute: - scale = 1.0 - else: - scale = 1.0 / np.mean(np.abs(fx)) - xb[k] = x[k] + deltaxk - fxb = f(xb, *args) - for _ in range(maxiter): - df = scale * np.mean(np.abs(fxb - fx)) - if df < deltafmin: - deltaxk *= 2.0 - elif df > deltafmax: - deltaxk /= 2.0 - else: - break - xb[k] = x[k] + deltaxk - fxb = f(xb, *args) - return ((fxb - fx) / deltaxk) - - -def grad(x, - f, - deltax0=1e-8, - deltafmin=1e-8, - deltafmax=5e-8, - maxiter=50, - absolute=False, - args=()): - if isinstance(deltax0, float): - deltax = np.full_like(x, deltax0) - else: - deltax = deltax0 - return (np.array([ - _grad1d(x, f, k, deltax[k], deltafmin, deltafmax, maxiter, absolute, args) - for k in range(x.size) - ])) - - -def _generate_random_C(seed=0, deriv=False): - np.random.seed(seed) - t = np.cumsum(10**np.random.uniform(-2, 1.5, n)) - sig_err = np.random.uniform(0.5, 1.5, n) - sig_jitter = np.random.uniform(0.5, 1.5) - inst_id = np.random.randint(0, ninst, n) - sig_jitter_inst = np.random.uniform(0.5, 1.5, ninst) - calib_file = np.empty(n, dtype=object) - sig_calib_meas = np.empty(n) - lastfileinst = ["" for _ in range(ninst)] - lastvarinst = [0 for _ in range(ninst)] - nlastinst = [0 for _ in range(ninst)] - for k in range(n): - i = inst_id[k] - if lastfileinst[i] == "" or nlastinst[i] == calibmax or np.random.rand( - ) > calibprob: - calib_file[k] = '{}'.format(k) - sig_calib_meas[k] = np.random.uniform(0.5, 1.5) - lastfileinst[i] = calib_file[k] - lastvarinst[i] = sig_calib_meas[k] - nlastinst[i] = 1 - else: - calib_file[k] = lastfileinst[i] - sig_calib_meas[k] = lastvarinst[i] - nlastinst[i] += 1 - sig_calib_inst = np.random.uniform(0.5, 1.5, ninst) - if not deriv: - a_exp = np.random.uniform(0.5, 1.5, nexp) - la_exp = 10**np.random.uniform(-2, 2, nexp) - a_qper = np.random.uniform(0.5, 1.5, nqper) - b_qper = np.random.uniform(0.05, 0.15, nqper) - la_qper = 10**np.random.uniform(-2, 2, nqper) - nu_qper = 10**np.random.uniform(-2, 2, nqper) - sig_mat32 = np.random.uniform(0.5, 1.5, nmat32) - rho_mat32 = 10**np.random.uniform(-2, 2, nmat32) - sig_mat52 = np.random.uniform(0.5, 1.5, nmat52) - rho_mat52 = 10**np.random.uniform(-2, 2, nmat52) - sig_es = np.random.uniform(0.5, 1.5, nes) - rho_es = 10**np.random.uniform(-2, 2, nes) - sig_usho = np.random.uniform(0.5, 1.5, nusho) - P0_usho = 10**np.random.uniform(-2, 2, nusho) - Q_usho = np.random.uniform(0.5, 20.0, nusho) - sig_osho = np.random.uniform(0.5, 1.5, nosho) - P0_osho = 10**np.random.uniform(-2, 2, nosho) - Q_osho = np.random.uniform(0.01, 0.5, nosho) - sig_sho = np.random.uniform(0.5, 1.5, nsho) - P0_sho = 10**np.random.uniform(-2, 2, nsho) - Q_sho = np.random.uniform(0.01, 2.0, nsho) - sig_mep = np.random.uniform(0.5, 1.5, nmep) - P_mep = 10**np.random.uniform(-2, 2, nmep) - rho_mep = 10**np.random.uniform(-2, 2, nmep) - eta_mep = 10**np.random.uniform(-2, 1, nmep) - sig_esp = np.random.uniform(0.5, 1.5, nesp) - P_esp = 10**np.random.uniform(-2, 2, nesp) - rho_esp = 10**np.random.uniform(-2, 2, nesp) - eta_esp = 10**np.random.uniform(-2, 1, nesp) - - if deriv: - return (Cov(t, - err=Error(sig_err), - jit=Jitter(sig_jitter), - **{ - f'insjit_{k}': InstrumentJitter(inst_id == k, sig_jitter_inst[k]) - for k in range(ninst) - }, - calerr=CalibrationError(calib_file, sig_calib_meas), - **{ - f'caljit_{k}': CalibrationJitter(inst_id == k, calib_file, - sig_calib_inst[k]) - for k in range(ninst) - }, - **{ - f'mat32_{k}': Matern32Kernel(sig_mat32[k], rho_mat32[k]) - for k in range(nmat32) - }, - **{ - f'mat52_{k}': Matern52Kernel(sig_mat52[k], rho_mat52[k]) - for k in range(nmat52) - }, - **{f'es_{k}': ESKernel(sig_es[k], rho_es[k]) - for k in range(nes)}, - **{ - f'usho_{k}': USHOKernel(sig_usho[k], P0_usho[k], Q_usho[k]) - for k in range(nusho) - }, - **{ - f'osho_{k}': OSHOKernel(sig_osho[k], P0_osho[k], Q_osho[k]) - for k in range(nosho) - }, - **{ - f'sho_{k}': SHOKernel(sig_sho[k], P0_sho[k], Q_sho[k]) - for k in range(nsho) - }, - **{ - f'mep_{k}': MEPKernel(sig_mep[k], P_mep[k], rho_mep[k], eta_mep[k]) - for k in range(nmep) - }, - **{ - f'esp_{k}': ESPKernel(sig_esp[k], P_esp[k], rho_esp[k], eta_esp[k]) - for k in range(nesp) - })) - else: - return (Cov(t, - err=Error(sig_err), - jit=Jitter(sig_jitter), - **{ - f'insjit_{k}': InstrumentJitter(inst_id == k, sig_jitter_inst[k]) - for k in range(ninst) - }, - calerr=CalibrationError(calib_file, sig_calib_meas), - **{ - f'caljit_{k}': CalibrationJitter(inst_id == k, calib_file, - sig_calib_inst[k]) - for k in range(ninst) - }, - **{ - f'exp_{k}': ExponentialKernel(a_exp[k], la_exp[k]) - for k in range(nexp) - }, - **{ - f'qper_{k}': QuasiperiodicKernel(a_qper[k], b_qper[k], la_qper[k], - nu_qper[k]) - for k in range(nqper) - }, - **{ - f'mat32_{k}': Matern32Kernel(sig_mat32[k], rho_mat32[k]) - for k in range(nmat32) - }, - **{ - f'mat52_{k}': Matern52Kernel(sig_mat52[k], rho_mat52[k]) - for k in range(nmat52) - }, - **{f'es_{k}': ESKernel(sig_es[k], rho_es[k]) - for k in range(nes)}, - **{ - f'usho_{k}': USHOKernel(sig_usho[k], P0_usho[k], Q_usho[k]) - for k in range(nusho) - }, - **{ - f'osho_{k}': OSHOKernel(sig_osho[k], P0_osho[k], Q_osho[k]) - for k in range(nosho) - }, - **{ - f'sho_{k}': SHOKernel(sig_sho[k], P0_sho[k], Q_sho[k]) - for k in range(nsho) - }, - **{ - f'mep_{k}': MEPKernel(sig_mep[k], P_mep[k], rho_mep[k], eta_mep[k]) - for k in range(nmep) - }, - **{ - f'esp_{k}': ESPKernel(sig_esp[k], P_esp[k], rho_esp[k], eta_esp[k]) - for k in range(nesp) - })) - - -def _generate_random_param(seed=1): - np.random.seed(seed) - sig_jitter = np.random.uniform(0.5, 1.5, 1) - sig_jitter_inst = np.random.uniform(0.5, 1.5, ninst) - sig_calib_inst = np.random.uniform(0.5, 1.5, ninst) - a_exp = np.random.uniform(0.5, 1.5, nexp) - la_exp = 10**np.random.uniform(-2, 2, nexp) - a_qper = np.random.uniform(0.5, 1.5, nqper) - b_qper = np.random.uniform(0.05, 0.15, nqper) - la_qper = 10**np.random.uniform(-2, 2, nqper) - nu_qper = 10**np.random.uniform(-2, 2, nqper) - sig_mat32 = np.random.uniform(0.5, 1.5, nmat32) - rho_mat32 = 10**np.random.uniform(-2, 2, nmat32) - sig_mat52 = np.random.uniform(0.5, 1.5, nmat52) - rho_mat52 = 10**np.random.uniform(-2, 2, nmat52) - sig_es = np.random.uniform(0.5, 1.5, nes) - rho_es = 10**np.random.uniform(-2, 2, nes) - sig_usho = np.random.uniform(0.5, 1.5, nusho) - P0_usho = 10**np.random.uniform(-2, 2, nusho) - Q_usho = np.random.uniform(0.5, 20.0, nusho) - sig_osho = np.random.uniform(0.5, 1.5, nosho) - P0_osho = 10**np.random.uniform(-2, 2, nosho) - Q_osho = np.random.uniform(0.01, 0.5, nosho) - sig_sho = np.random.uniform(0.5, 1.5, nsho) - P0_sho = 10**np.random.uniform(-2, 2, nsho) - Q_sho = np.random.uniform(0.01, 2.0, nsho) - sig_mep = np.random.uniform(0.5, 1.5, nmep) - P_mep = 10**np.random.uniform(-2, 2, nmep) - rho_mep = 10**np.random.uniform(-2, 2, nmep) - eta_mep = 10**np.random.uniform(-2, 1, nmep) - sig_esp = np.random.uniform(0.5, 1.5, nesp) - P_esp = 10**np.random.uniform(-2, 2, nesp) - rho_esp = 10**np.random.uniform(-2, 2, nesp) - eta_esp = 10**np.random.uniform(-2, 1, nesp) - - return (sig_jitter, sig_jitter_inst, sig_calib_inst, a_exp, la_exp, a_qper, - b_qper, la_qper, nu_qper, sig_mat32, rho_mat32, sig_mat52, rho_mat52, - sig_es, rho_es, sig_usho, P0_usho, Q_usho, sig_osho, P0_osho, Q_osho, - sig_sho, P0_sho, Q_sho, sig_mep, P_mep, rho_mep, eta_mep, sig_esp, P_esp, - rho_esp, eta_esp) - - -def test_Cov(): - C = _generate_random_C() - - C_full = C.expand() - L_full = C.expandL() - D_full = np.diag(C.D) - - LDLt_full = L_full @ D_full @ L_full.T - err = np.max( - np.abs(C_full - LDLt_full)) / np.max(np.abs(C_full) + np.abs(LDLt_full)) - assert err < prec, ('Cholesky decomposition not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_set_param(): - C = _generate_random_C() - param = list(_generate_random_param()) - Cb = Cov(C.t, - err=Error(C.term['err']._sig), - jit=Jitter(param[0][0]), - **{ - f'insjit_{k}': InstrumentJitter(C.term[f'insjit_{k}']._indices, - param[1][k]) - for k in range(ninst) - }, - calerr=CalibrationError(C.term['calerr']._calib_id, C.term['calerr']._sig), - **{ - f'caljit_{k}': CalibrationJitter(C.term[f'insjit_{k}']._indices, - C.term['calerr']._calib_id, param[2][k]) - for k in range(ninst) - }, - **{ - f'exp_{k}': ExponentialKernel(param[3][k], param[4][k]) - for k in range(nexp) - }, - **{ - f'qper_{k}': QuasiperiodicKernel(param[5][k], param[6][k], param[7][k], - param[8][k]) - for k in range(nqper) - }, - **{ - f'mat32_{k}': Matern32Kernel(param[9][k], param[10][k]) - for k in range(nmat32) - }, - **{ - f'mat52_{k}': Matern52Kernel(param[11][k], param[12][k]) - for k in range(nmat52) - }, - **{f'es_{k}': ESKernel(param[13][k], param[14][k]) - for k in range(nes)}, - **{ - f'usho_{k}': USHOKernel(param[15][k], param[16][k], param[17][k]) - for k in range(nusho) - }, - **{ - f'osho_{k}': OSHOKernel(param[18][k], param[19][k], param[20][k]) - for k in range(nosho) - }, - **{ - f'sho_{k}': SHOKernel(param[21][k], param[22][k], param[23][k]) - for k in range(nsho) - }, - **{ - f'mep_{k}': MEPKernel(param[24][k], param[25][k], param[26][k], - param[27][k]) - for k in range(nmep) - }, - **{ - f'esp_{k}': ESPKernel(param[28][k], param[29][k], param[30][k], - param[31][k]) - for k in range(nesp) - }) - - C.set_param(np.concatenate(param), - ['jit.sig'] + [f'insjit_{k}.sig' - for k in range(ninst)] + [f'caljit_{k}.sig' - for k in range(ninst)] + [f'exp_{k}.a' - for k in range(nexp)] + [f'exp_{k}.la' - for k in range(nexp)] + [f'qper_{k}.a' - for k in range(nqper)] + [f'qper_{k}.b' - for k in range(nqper)] + [f'qper_{k}.la' - for k in range(nqper)] + [f'qper_{k}.nu' - for k in range(nqper)] + [f'mat32_{k}.sig' - for k in range(nmat32)] + [f'mat32_{k}.rho' - for k in range(nmat32)] + [f'mat52_{k}.sig' - for k in range(nmat52)] + [f'mat52_{k}.rho' - for k in range(nmat52)] + [f'es_{k}.sig' - for k in range(nes)] + [f'es_{k}.rho' - for k in range(nes)] + [f'usho_{k}.sig' - for k in range(nusho)] + [f'usho_{k}.P0' - for k in range(nusho)] + [f'usho_{k}.Q' - for k in range(nusho)] + [f'osho_{k}.sig' - for k in range(nosho)] + [f'osho_{k}.P0' - for k in range(nosho)] + [f'osho_{k}.Q' - for k in range(nosho)] + [f'sho_{k}.sig' - for k in range(nsho)] + [f'sho_{k}.P0' - for k in range(nsho)] + [f'sho_{k}.Q' - for k in range(nsho)] + [f'mep_{k}.sig' - for k in range(nmep)] + [f'mep_{k}.P' - for k in range(nmep)] + [f'mep_{k}.rho' - for k in range(nmep)] + [f'mep_{k}.eta' - for k in range(nmep)] + [f'esp_{k}.sig' - for k in range(nesp)] + [f'esp_{k}.P' - for k in range(nesp)] + [f'esp_{k}.rho' - for k in range(nesp)] + [f'esp_{k}.eta' for k in range(nesp)]) - - C_full = C.expand() - Cb_full = Cb.expand() - L_full = C.expandL() - Lb_full = Cb.expandL() - - err = np.max( - np.abs(C_full - Cb_full)) / np.max(np.abs(C_full) + np.abs(Cb_full)) - err = max( - err, - np.max(np.abs(L_full - Lb_full)) / - np.max(np.abs(L_full) + np.abs(Lb_full))) - err = max(err, - np.max(np.abs(C.D - Cb.D)) / np.max(np.abs(C.D) + np.abs(Cb.D))) - - assert err < prec, ('set_param not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_inv(): - C = _generate_random_C() - - C_full = C.expand() - invC_full = C.expandInv() - - CinvC_full = C_full @ invC_full - err = np.max(np.abs(CinvC_full - np.identity(n))) - assert err < prec, ('Inversion not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_invL(): - C = _generate_random_C() - - L_full = C.expandL() - invL_full = C.expandInvL() - - LinvL_full = L_full @ invL_full - err = np.max(np.abs(LinvL_full - np.identity(n))) - assert err < prec, ('Cholesky inversion not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_logdet(): - C = _generate_random_C() - - logdet = C.logdet() - - C_full = C.expand() - sign_full, logdet_full = np.linalg.slogdet(C_full) - - err = abs(logdet / logdet_full - 1) - - assert sign_full > 0, 'logdet is not positive' - assert err < prec, ('logdet not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_dotL(): - C = _generate_random_C() - x = np.random.normal(0.0, 1.0, C.n) - - y = C.dotL(x) - - L_full = C.expandL() - y_full = L_full.dot(x) - - err = np.max(np.abs(y - y_full)) / np.max(np.abs(y) + np.abs(y_full)) - - assert err < prec, ('dotL not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_solveL(): - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - x = C.solveL(y) - - L_full = C.expandL() - x_full = np.linalg.solve(L_full, y) - - err = np.max(np.abs(x - x_full)) / np.max(np.abs(x) + np.abs(x_full)) - - assert err < prec, ('solveL not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_chi2(): - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - chi2 = C.chi2(y) - - C_full = C.expand() - invC_full = np.linalg.inv(C_full) - chi2_full = y.T @ invC_full @ y - - err = abs(chi2 - chi2_full) / (abs(chi2) + abs(chi2_full)) - - assert err < prec, ('chi2 not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_loglike(): - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - loglike = C.loglike(y) - - C_full = C.expand() - invC_full = np.linalg.inv(C_full) - chi2_full = y.T @ invC_full @ y - _, logdet_full = np.linalg.slogdet(C_full) - loglike_full = -0.5 * (chi2_full + logdet_full + C.n * np.log(2.0 * np.pi)) - - err = abs(loglike - loglike_full) / (abs(loglike) + abs(loglike_full)) - assert err < prec, ('loglike not working' - ' at required precision ({} > {})').format(err, prec) - - -def _test_method_back(method): - """ - Common code for testing dotL_back, solveL_back, dotLT_back, solveLT_back - """ - C = _generate_random_C() - a = np.random.normal(0.0, 5.0, C.n) - grad_b = np.random.normal(0.0, 1.0, C.n) - - # Analytical grad - func = getattr(C, method) - _ = func(a) - C.init_grad() - grad_a = getattr(C, method + '_back')(grad_b) - C.cholesky_back() - grad_param = C.grad_param() - - # Numerical grad - def func_param(x): - C.set_param(x) - return (func(a)) - - grad_a_num = [] - grad_param_num = [] - for delta0 in [delta, coef_delta * delta]: - grad_a_num.append(grad(a, func, deltax0=delta0) @ grad_b) - grad_param_num.append( - grad(C.get_param(), func_param, deltax0=delta0) @ grad_b) - - # Comparison - err = np.max( - np.abs(grad_a - np.mean(grad_a_num, axis=0)) / - (np.abs(grad_a_num[1]) + np.abs(grad_a_num[0]))) - num_err = np.max( - np.abs(grad_a_num[1] - grad_a_num[0]) / - (np.abs(grad_a_num[1]) + np.abs(grad_a_num[0]))) - err = max(0.0, err - coef_num_err * num_err) - assert err < prec, ('{}_back (a) not working' - ' at required precision ({} > {})').format(method, err, prec) - - err = np.max( - np.abs(grad_param - np.mean(grad_param_num, axis=0)) / - (np.abs(grad_param_num[1]) + np.abs(grad_param_num[0]))) - num_err = np.max( - np.abs(grad_param_num[1] - grad_param_num[0]) / - (np.abs(grad_param_num[1]) + np.abs(grad_param_num[0]))) - err = max(0.0, err - coef_num_err * num_err) - assert err < prec, ('{}_back (param) not working' - ' at required precision ({} > {})').format(method, err, prec) - - -def test_dotL_back(): - _test_method_back('dotL') - - -def test_solveL_back(): - _test_method_back('solveL') - - -def test_dotLT_back(): - _test_method_back('dotLT') - - -def test_solveLT_back(): - _test_method_back('solveLT') - - -def _test_method_grad(method): - """ - Common code for testing chi2_grad, loglike_grad - """ - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - # Analytical grad - func = getattr(C, method) - _ = func(y) - f_grad_res, f_grad_param = getattr(C, method + '_grad')() - - # Numerical grad - def func_param(x): - C.set_param(x) - return (func(y)) - - f_grad_res_num = [] - f_grad_param_num = [] - for delta0 in [delta, coef_delta * delta]: - f_grad_res_num.append(grad(y, func, deltax0=delta0)) - f_grad_param_num.append(grad(C.get_param(), func_param, deltax0=delta0)) - - # Comparison - err = np.max( - np.abs(f_grad_res - np.mean(f_grad_res_num, axis=0)) / - (np.abs(f_grad_res_num[1]) + np.abs(f_grad_res_num[0]))) - num_err = np.max( - np.abs(f_grad_res_num[1] - f_grad_res_num[0]) / - (np.abs(f_grad_res_num[1]) + np.abs(f_grad_res_num[0]))) - err = max(0.0, err - coef_num_err * num_err) - assert err < prec, ('{}_grad (y) not working' - ' at required precision ({} > {})').format(method, err, prec) - - err = np.max( - np.abs(f_grad_param - np.mean(f_grad_param_num, axis=0)) / - (np.abs(f_grad_param_num[1]) + np.abs(f_grad_param_num[0]))) - num_err = np.max( - np.abs(f_grad_param_num[1] - f_grad_param_num[0]) / - (np.abs(f_grad_param_num[1]) + np.abs(f_grad_param_num[0]))) - err = max(0.0, err - coef_num_err * num_err) - assert err < prec, ('{}_grad (param) not working' - ' at required precision ({} > {})').format(method, err, prec) - - -def test_chi2_grad(): - _test_method_grad('chi2') - - -def test_loglike_grad(): - _test_method_grad('loglike') - - -def _test_self_conditional(kernel=None): - print(kernel) - C = _generate_random_C() - y = C.sample() - - mu = C.self_conditional(y, kernel=kernel) - muv, var = C.self_conditional(y, calc_cov='diag', kernel=kernel) - muc, cov = C.self_conditional(y, calc_cov=True, kernel=kernel) - - invC_full = C.expandInv() - invCy_full = invC_full.dot(y) - term = {} - if kernel is None: - kernel = C.kernel - for key in kernel: - term[key] = C.kernel[key].__class__( - *[getattr(C.kernel[key], f'_{param}') for param in C.kernel[key]._param]) - print(term) - K = Cov(C.t, **term) - K_full = K.expand() - mu_full = K_full @ invCy_full - cov_full = K_full - K_full @ invC_full @ K_full - var_full = np.diag(cov_full) - - err = np.max(np.abs(mu - mu_full)) / np.max(np.abs(mu) + np.abs(mu_full)) - assert err < prec, ('self_conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muv - mu_full)) / np.max(np.abs(muv) + np.abs(mu_full)) - assert err < prec, ('self_conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muc - mu_full)) / np.max(np.abs(muc) + np.abs(mu_full)) - assert err < prec, ('self_conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(var - var_full)) / np.max(np.abs(var) + np.abs(var_full)) - assert err < prec, ('self_conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(cov - cov_full)) / np.max(np.abs(cov) + np.abs(cov_full)) - assert err < prec, ('self_conditional not working' - ' at required precision ({} > {})').format(err, prec) - - -def _test_conditional(kernel=None): - C = _generate_random_C() - y = C.sample() - - n2 = 300 - Dt = C.t[-1] - C.t[0] - margin = Dt / 10 - t2 = np.linspace(C.t[0] - margin, C.t[-1] + margin, n2) - mu = C.conditional(y, t2, kernel=kernel) - muv, var = C.conditional(y, t2, calc_cov='diag', kernel=kernel) - muc, cov = C.conditional(y, t2, calc_cov=True, kernel=kernel) - - invC_full = C.expandInv() - invCy_full = invC_full.dot(y) - Km_full = C.eval(t2[:, None] - C.t[None, :], kernel=kernel) - term = {} - if kernel is None: - kernel = C.kernel - for key in kernel: - term[key] = C.kernel[key].__class__( - *[getattr(C.kernel[key], f'_{param}') for param in C.kernel[key]._param]) - K = Cov(t2, **term) - K_full = K.expand() - mu_full = Km_full @ invCy_full - cov_full = K_full - Km_full @ invC_full @ Km_full.T - var_full = np.diag(cov_full) - - err = np.max(np.abs(mu - mu_full)) / np.max(np.abs(mu) + np.abs(mu_full)) - assert err < prec, ('conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muv - mu_full)) / np.max(np.abs(muv) + np.abs(mu_full)) - assert err < prec, ('conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muc - mu_full)) / np.max(np.abs(muc) + np.abs(mu_full)) - assert err < prec, ('conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(var - var_full)) / np.max(np.abs(var) + np.abs(var_full)) - assert err < prec, ('conditional not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(cov - cov_full)) / np.max(np.abs(cov) + np.abs(cov_full)) - assert err < prec, ('conditional not working' - ' at required precision ({} > {})').format(err, prec) - - -def _test_self_conditional_derivative(kernel=None): - C = _generate_random_C(deriv=True) - y = C.sample() - - # Analytical derivative - dmu = C.self_conditional_derivative(y, kernel=kernel) - dmuv, dvar = C.self_conditional_derivative(y, calc_cov='diag', kernel=kernel) - dmuc, dcov = C.self_conditional_derivative(y, calc_cov=True, kernel=kernel) - - # Numerical derivative - num_dmu = [] - num_dcov = [] - for dt in [delta, coef_delta * delta]: - tfull = np.sort(np.concatenate((C.t, C.t + dt))) - mu, cov = C.conditional(y, tfull, calc_cov=True, kernel=kernel) - num_dmu.append((mu[1::2] - mu[::2]) / abs(dt)) - num_dcov.append( - (cov[1::2, 1::2] + cov[::2, ::2] - cov[1::2, ::2] - cov[::2, 1::2]) / - dt**2) - - num_dmu_mean = (num_dmu[0] + num_dmu[1]) / 2 - num_dmu_err = np.max(np.abs(num_dmu[0] - - num_dmu[1])) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - - num_dcov_mean = (num_dcov[0] + num_dcov[1]) / 2 - num_dcov_err = np.max(np.abs(num_dcov[0] - - num_dcov[1])) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1])) - - num_dvar_mean = num_dcov_mean.diagonal() - num_dvar_err = np.max( - np.abs(num_dcov[0].diagonal() - num_dcov[1].diagonal())) / np.max( - np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal())) - - err = np.max(np.abs(dmu - - num_dmu_mean)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - err = max(0.0, err - coef_num_err * num_dmu_err) - assert err < prec, ('self_conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max( - np.abs(dmuv - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - err = max(0.0, err - coef_num_err * num_dmu_err) - assert err < prec, ('self_conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max( - np.abs(dmuc - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - err = max(0.0, err - coef_num_err * num_dmu_err) - assert err < prec, ('self_conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(dvar - num_dvar_mean)) / np.max( - np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal())) - err = max(0.0, err - coef_num_err * num_dvar_err) - assert err < prec, ('self_conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(dcov - - num_dcov_mean)) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1])) - err = max(0.0, err - coef_num_err * num_dcov_err) - assert err < prec, ('self_conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - -def _test_conditional_derivative(kernel=None): - C = _generate_random_C(deriv=True) - y = C.dotL(np.random.normal(0.0, C.sqD())) - - n2 = 1001 - Dt = C.t[-1] - C.t[0] - margin = Dt / 10 - t2 = np.linspace(C.t[0] - margin, C.t[-1] + margin, n2) - - # Analytical derivative - dmu = C.conditional_derivative(y, t2, kernel=kernel) - dmuv, dvar = C.conditional_derivative(y, t2, calc_cov='diag', kernel=kernel) - dmuc, dcov = C.conditional_derivative(y, t2, calc_cov=True, kernel=kernel) - - # Numerical derivative - num_dmu = [] - num_dcov = [] - for dt in [delta, coef_delta * delta]: - tfull = np.sort(np.concatenate((t2, t2 + dt))) - mu, cov = C.conditional(y, tfull, calc_cov=True, kernel=kernel) - num_dmu.append((mu[1::2] - mu[::2]) / abs(dt)) - num_dcov.append( - (cov[1::2, 1::2] + cov[::2, ::2] - cov[1::2, ::2] - cov[::2, 1::2]) / - dt**2) - - num_dmu_mean = (num_dmu[0] + num_dmu[1]) / 2 - num_dmu_err = np.max(np.abs(num_dmu[0] - - num_dmu[1])) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - - num_dcov_mean = (num_dcov[0] + num_dcov[1]) / 2 - num_dcov_err = np.max(np.abs(num_dcov[0] - - num_dcov[1])) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1])) - - num_dvar_mean = num_dcov_mean.diagonal() - num_dvar_err = np.max( - np.abs(num_dcov[0].diagonal() - num_dcov[1].diagonal())) / np.max( - np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal())) - - err = np.max(np.abs(dmu - - num_dmu_mean)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - err = max(0.0, err - coef_num_err * num_dmu_err) - assert err < prec, ('conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max( - np.abs(dmuv - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - err = max(0.0, err - coef_num_err * num_dmu_err) - assert err < prec, ('conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max( - np.abs(dmuc - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1])) - err = max(0.0, err - coef_num_err * num_dmu_err) - assert err < prec, ('conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(dvar - num_dvar_mean)) / np.max( - np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal())) - err = max(0.0, err - coef_num_err * num_dvar_err) - assert err < prec, ('conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(dcov - - num_dcov_mean)) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1])) - err = max(0.0, err - coef_num_err * num_dcov_err) - assert err < prec, ('conditional_derivative not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_all_conditional(): - for kernel in [ - None, ['mat32_0', 'usho_0'], ['osho_0'], ['mat52_0', 'sho_0'], - ['es_0', 'sho_0'], ['mep_0'], ['esp_0'] - ]: - _test_self_conditional(kernel) - _test_conditional(kernel) - _test_self_conditional_derivative(kernel) - _test_conditional_derivative(kernel) diff --git a/kima/vendor/spleaf/test/test_spleaf.py b/kima/vendor/spleaf/test/test_spleaf.py deleted file mode 100644 index 25b1b49..0000000 --- a/kima/vendor/spleaf/test/test_spleaf.py +++ /dev/null @@ -1,418 +0,0 @@ -import pytest -import numpy as np -from spleaf import Spleaf - -prec = 1e-12 -n = 143 -r = 11 -bmax = 11 -delta = 1e-7 - - -def _generate_random_C(seed=0): - np.random.seed(seed) - - k = np.arange(n) - - U = np.random.uniform(0.5, 1.5, (n, r)) - V = np.random.uniform(0.5, 1.5, (n, r)) - log10phi = np.random.uniform(-4, 0, (n - 1, r)) - phi = 10**log10phi - - b = np.minimum(k, np.random.randint(bmax + 1)) - offsetrow = np.cumsum(b - 1) + 1 - nF = offsetrow[-1] + n - 1 - F = np.random.uniform(0.25, 0.5, nF)**2 - - A = np.random.uniform(1.5, 2.5, n)**2 + np.sum(U * V, axis=1) - - return (Spleaf(A, U, V, phi, offsetrow, b, F)) - - -def _generate_random_param(C, seed=1): - np.random.seed(seed) - - U = np.random.uniform(0.5, 1.5, (n, r)) - V = np.random.uniform(0.5, 1.5, (n, r)) - log10phi = np.random.uniform(-4, 0, (n - 1, r)) - phi = 10**log10phi - - nF = C.offsetrow[-1] + n - 1 - F = np.random.uniform(0.25, 0.5, nF)**2 - - A = np.random.uniform(1.5, 2.5, n)**2 + np.sum(U * V, axis=1) - - return (A, U, V, phi, F) - - -def test_Spleaf(): - C = _generate_random_C() - - C_full = C.expand() - L_full = C.expandL() - D_full = np.diag(C.D) - - LDLt_full = L_full @ D_full @ L_full.T - err = np.max(np.abs(C_full - LDLt_full)) - assert err < prec, ('Cholesky decomposition not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_set_param(): - C = _generate_random_C() - A, U, V, phi, F = _generate_random_param(C) - Cb = Spleaf(A, U, V, phi, C.offsetrow, C.b, F) - C.set_param(A, U, V, phi, F) - - C_full = C.expand() - Cb_full = Cb.expand() - L_full = C.expandL() - Lb_full = Cb.expandL() - - err = np.max(np.abs(C_full - Cb_full)) - err = max(err, np.max(np.abs(L_full - Lb_full))) - err = max(err, np.max(np.abs(C.D - Cb.D))) - - assert err < prec, ('set_param not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_expandInv(): - C = _generate_random_C() - - C_full = C.expand() - invC_full = C.expandInv() - - CinvC_full = C_full @ invC_full - err = np.max(np.abs(CinvC_full - np.identity(n))) - assert err < prec, ('Inversion not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_expandInvL(): - C = _generate_random_C() - - L_full = C.expandL() - invL_full = C.expandInvL() - - LinvL_full = L_full @ invL_full - err = np.max(np.abs(LinvL_full - np.identity(n))) - assert err < prec, ('Cholesky inversion not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_logdet(): - C = _generate_random_C() - - logdet = C.logdet() - - C_full = C.expand() - sign_full, logdet_full = np.linalg.slogdet(C_full) - - err = abs(logdet / logdet_full - 1) - - assert sign_full > 0, 'logdet is not positive' - assert err < prec, ('logdet not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_dotL(): - C = _generate_random_C() - x = np.random.normal(0.0, 1.0, C.n) - - y = C.dotL(x) - - L_full = C.expandL() - y_full = L_full.dot(x) - - err = np.max(np.abs(y - y_full)) - - assert err < prec, ('dotL not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_solveL(): - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - x = C.solveL(y) - - L_full = C.expandL() - x_full = np.linalg.solve(L_full, y) - - err = np.max(np.abs(x - x_full)) - - assert err < prec, ('solveL not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_dotLT(): - C = _generate_random_C() - x = np.random.normal(0.0, 1.0, C.n) - - y = C.dotLT(x) - - L_full = C.expandL() - y_full = L_full.T.dot(x) - - err = np.max(np.abs(y - y_full)) - - assert err < prec, ('dotL not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_solveLT(): - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - x = C.solveLT(y) - - L_full = C.expandL() - x_full = np.linalg.solve(L_full.T, y) - - err = np.max(np.abs(x - x_full)) - - assert err < prec, ('solveL not working' - ' at required precision ({} > {})').format(err, prec) - - -def _test_method_back(method): - """ - Common code for testing dotL_back, solveL_back, dotLT_back, solveLT_back - """ - C = _generate_random_C() - a = np.random.normal(0.0, 5.0, C.n) - grad_b = np.random.normal(0.0, 1.0, C.n) - - func = getattr(C, method) - b = func(a) - C.init_grad() - grad_a = getattr(C, method + '_back')(grad_b) - C.cholesky_back() - grad_param = C.grad_param() - - # grad_a - grad_a_num = [] - for dx in [delta, -delta]: - grad_a_num_dx = [] - for k in range(C.n): - a[k] += dx - db = func(a) - b - grad_a_num_dx.append(db @ grad_b / dx) - a[k] -= dx - grad_a_num.append(grad_a_num_dx) - grad_a_num = np.array(grad_a_num) - err = np.max(np.abs(grad_a - np.mean(grad_a_num, axis=0))) - num_err = np.max(np.abs(grad_a_num[1] - grad_a_num[0])) - err = max(0.0, err - num_err) - assert err < prec, ('{}_back (a) not working' - ' at required precision ({} > {})').format(method, err, prec) - - # grad_param - kwargs = {'A': C.A, 'U': C.U, 'V': C.V, 'phi': C.phi, 'F': C.F} - for kparam, param in enumerate(['A', 'U', 'V', 'phi', 'F']): - grad_param_num = [] - for dx in [delta, -delta]: - grad_param_num_dx = [] - Cparam = getattr(C, param).copy() - for k in range(Cparam.size): - Cparam.flat[k] += dx - kwargs[param] = Cparam.copy() - C.set_param(**kwargs) - db = getattr(C, method)(a) - b - grad_param_num_dx.append(db @ grad_b / dx) - Cparam.flat[k] -= dx - kwargs[param] = Cparam - C.set_param(**kwargs) - grad_param_num.append(grad_param_num_dx) - grad_param_num = np.array(grad_param_num) - err = np.max( - np.abs(grad_param[kparam].flat - np.mean(grad_param_num, axis=0))) - num_err = np.max(np.abs(grad_param_num[1] - grad_param_num[0])) - err = max(0.0, err - num_err) - assert err < prec, ('{}_back ({}) not working' - ' at required precision ({} > {})').format(method, param, err, prec) - - -def test_dotL_back(): - _test_method_back('dotL') - - -def test_solveL_back(): - _test_method_back('solveL') - - -def test_dotLT_back(): - _test_method_back('dotLT') - - -def test_solveLT_back(): - _test_method_back('solveLT') - - -def test_chi2(): - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - chi2 = C.chi2(y) - - C_full = C.expand() - invC_full = np.linalg.inv(C_full) - chi2_full = y.T @ invC_full @ y - - err = abs(chi2 - chi2_full) - - assert err < prec, ('chi2 not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_loglike(): - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - loglike = C.loglike(y) - - C_full = C.expand() - invC_full = np.linalg.inv(C_full) - chi2_full = y.T @ invC_full @ y - _, logdet_full = np.linalg.slogdet(C_full) - loglike_full = -0.5 * (chi2_full + logdet_full + C.n * np.log(2.0 * np.pi)) - - err = abs(loglike - loglike_full) - assert err < prec, ('loglike not working' - ' at required precision ({} > {})').format(err, prec) - - -def _test_method_grad(method): - """ - Common code for testing chi2_grad, loglike_grad - """ - C = _generate_random_C() - y = np.random.normal(0.0, 5.0, C.n) - - func = getattr(C, method) - f = func(y) - f_grad_res, f_grad_param = getattr(C, method + '_grad')() - - # grad_y - f_grad_num = [] - for dx in [delta, -delta]: - f_grad_num_dx = [] - for k in range(C.n): - y[k] += dx - df = func(y) - f - f_grad_num_dx.append(df / dx) - y[k] -= dx - f_grad_num.append(f_grad_num_dx) - f_grad_num = np.array(f_grad_num) - err = np.max(np.abs(f_grad_res - np.mean(f_grad_num, axis=0))) - num_err = np.max(np.abs(f_grad_num[1] - f_grad_num[0])) - err = max(0.0, err - num_err) - assert err < prec, ('{}_grad (y) not working' - ' at required precision ({} > {})').format(method, err, prec) - - # grad_param - kwargs = {'A': C.A, 'U': C.U, 'V': C.V, 'phi': C.phi, 'F': C.F} - for kparam, param in enumerate(['A', 'U', 'V', 'phi', 'F']): - f_grad_num = [] - for dx in [delta, -delta]: - f_grad_num_dx = [] - Cparam = getattr(C, param).copy() - for k in range(Cparam.size): - Cparam.flat[k] += dx - kwargs[param] = Cparam.copy() - C.set_param(**kwargs) - df = getattr(C, method)(y) - f - f_grad_num_dx.append(df / dx) - Cparam.flat[k] -= dx - kwargs[param] = Cparam - C.set_param(**kwargs) - f_grad_num.append(f_grad_num_dx) - f_grad_num = np.array(f_grad_num) - err = np.max( - np.abs(f_grad_param[kparam].flat - np.mean(f_grad_num, axis=0))) - num_err = np.max(np.abs(f_grad_num[1] - f_grad_num[0])) - err = max(0.0, err - num_err) - assert err < prec, ('{}_grad ({}) not working' - ' at required precision ({} > {})').format(method, param, err, prec) - - -def test_chi2_grad(): - _test_method_grad('chi2') - - -def test_loglike_grad(): - _test_method_grad('loglike') - - -def test_self_conditional(): - C = _generate_random_C() - y = C.sample() - mu = C.self_conditional(y) - muv, var = C.self_conditional(y, 'diag') - muc, cov = C.self_conditional(y, True) - - C_full = C.expand() - A = np.sum(C.U * C.V, axis=1) - b = np.zeros(C.n, dtype=int) - offsetrow = np.cumsum(b - 1) + 1 - F = np.zeros(0) - K_full = Spleaf(A, C.U, C.V, C.phi, offsetrow, b, F).expand() - mu_full = K_full @ np.linalg.solve(C_full, y) - cov_full = K_full - K_full @ np.linalg.inv(C_full) @ K_full - - err = np.max(np.abs(mu - mu_full)) - assert err < prec, ('conditional mean not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muv - mu_full)) - assert err < prec, ('conditional mean not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muc - mu_full)) - assert err < prec, ('conditional mean not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(var - np.diag(cov_full))) - assert err < prec, ('conditional var not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(cov - cov_full)) - assert err < prec, ('conditional cov not working' - ' at required precision ({} > {})').format(err, prec) - - -def test_conditional(): - C = _generate_random_C() - y = C.sample() - mu_self, cov_self = C.self_conditional(y, True) - _, var_self = C.self_conditional(y, 'diag') - - ref = np.arange(C.n) - phi2left = np.ones((C.n, C.r)) - phi2right = np.concatenate((C.phi, np.ones((1, C.r)))) - - mu = C.conditional(y, C.U, C.V, C.phi, ref, phi2left, phi2right) - muv, var = C.conditional(y, C.U, C.V, C.phi, ref, phi2left, phi2right, - 'diag') - muc, cov = C.conditional(y, C.U, C.V, C.phi, ref, phi2left, phi2right, True) - - err = np.max(np.abs(mu - mu_self)) - assert err < prec, ('conditional mean not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muv - mu_self)) - assert err < prec, ('conditional mean not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(muc - mu_self)) - assert err < prec, ('conditional mean not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(var - var_self)) - assert err < prec, ('conditional var not working' - ' at required precision ({} > {})').format(err, prec) - - err = np.max(np.abs(cov - cov_self)) - assert err < prec, ('conditional cov not working' - ' at required precision ({} > {})').format(err, prec)